NAV Navbar
Logo
Java Ruby Go PHP Python Dart

Введение

Спасибо за выбор Synergy CRM! Данный API позволяет работать со всеми основными объектами и настройками SynergyCRM, благодаря чему вы можете быстро создавать свои собственные приложения. В случае возникновения вопросов по работе API обращайтесь в техническую поддержку.

Получение API токена

Для корректной работы всех последующих примеров вам потребуется ключ для доступа к SynergyCRM API. Чтобы получить данный ключ перейдите в раздел Настройки / Настройки API из своего аккаунта. Детали можно посмотреть в инструкции по ссылке.

Спецификация

Форматы запросов и ответов к API соответствуют спецификации JSON API v1.0.

Общие принципы

Постраничный вывод (пагинация)

Пример ответа, содержащего мета данные о количестве объектов и количество страниц

    {
      "data" : [....],
      "meta": {
        "record-count": 2222,
        "page-count": 22
      }
    }

Для перехода на вторую (третью, четвертую и тд) страницу, необходимо в адрес запроса указывать параметр page[number], например, чтобы получить вторую страницу сделок нужно GET запрос отправлять на адрес https://app.synergycrm.ru/api/v1/deals?page[number]=2.

Для изменения количества выводимых объектов на страницу нужно использовать параметр page[size], по умолчанию размер страницы составляет 50 объектов, максимально допустимый 100 объектов. GET запрос на адрес https://app.synergycrm.ru/api/v1/deals?page[size]=5 вернет 5 сделок.

Оба параметра page[number] и page[size] можно вызывать вместе, GET запрос на адрес https://app.synergycrm.ru/api/v1/deals?page[number]=2&page[size]=2 вернет две сделки второй страницы.

Каждый ответ содержит не только ключ c данными (data), но и ключ с метаданными (meta), в котором хранится информация о общем количестве объектов (record-count) запрашиваемой сущности и о общем количестве страниц (page-count).

Таким образом, на основании метаданных, можно строить логику деления объектов на страницы.

Авторизация

Чтобы авторизоваться используйте следующий код:

curl "https://app.synergycrm.ru/api/v1/deals" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/deals");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/deals')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/deals", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deals',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/deals"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/deals'));

  request.headers.addAll(headers);

  http.StreamedResponse response = await request.send();

  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Используйте полученный в настройках API токен вместо api_token.

Каждый запрос к API требует авторизации. Для авторизации необходим специальный уникальный токен.

Токен авторизации необходимо передавать в заголовке Authorization каждого запроса. Пример:

Authorization: Bearer access_api_token

Информация о токене

Возвращает информацию о токене и настройках

curl "https://app.synergycrm.ru/api/v1/current-token" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/current-token");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/current-token')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/current-token", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/current-token',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/current-token"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/current-token'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Содержит в себе информацию о настройках приложения, что может быть полезно при работе с приложениями из маркетплейса.

JSON API type oauth-token
URL /api/v1/current-token
Чтение GET /api/v1/current-token
Редактирование PATCH /api/v1/current-token

Пример токена с настройками

{
    "data": {
        "id": "2",
        "type": "oauth-token",
        "links": {
            "self": "https://app.synergycrm.ru/api/v1/oauth-token"
        },
        "attributes": {
            "created-at": "2022-02-22T12:02:22.222+03:00",
            "updated-at": "2022-02-22T12:02:22.222+03:00",
            "cached-at": "2022-02-22T12:02:22.222+03:00",
            "options": {},
            "token": "bRx2cpE22ZOl2A2UFVJTX2CoVl2gBVg2FR22qMcI-PM",
            "token-label": "1",
            "scopes": "api",
            "user-id": 2,
            "subscription-expires-at": "2022-02-22T12:02:22.222+03:00",
            "subscription-rights": {
                "price": 0.0,
                "license_included": 1,
                "license_count": 9999,
                "license_price": 1350.0,
                "license_min_count": 3,
                "default_payment_period": 3,
                "payment_periods": [
                    3,
                    6,
                    12,
                    24
                ],
                "disabled_payment_periods": [],
                "discount_map": [
                    [
                        6,
                        20
                    ],
                    [
                        12,
                        30
                    ],
                    [
                        24,
                        40
                    ]
                ],
                "api": true,
                "scenarios": 9999,
                "dynamic_tabs": true,
                "document_templates": 9999,
                "objects": 0,
                "sms": true,
                "telephony": true,
                "web_form": true,
                "roistat": true,
                "dadata_from_api": false,
                "manual_scenarios_api": false,
                "mail_count": 9999,
                "mail_method": "user",
                "table_filters": 9999,
                "custom_fields": 5000,
                "disabled_custom_types": [],
                "storage": true,
                "import": -1,
                "export": "csv,xls",
                "analytic":  9999999,
                "settings_copy": true,
                "card_blocks": true,
                "invoices": true,
                "payments": true,
                "entries": true,
                "checkups": true,
                "contracts": true,
                "contact_groups": true,
                "recurrence_rules": true,
                "user_salaries": true,
                "indiboards": 9999,
                "org_details": 9999,
                "telegram": true,
                "sales_funnel": 9999,
                "time_tracking": true,
                "ip_security": true,
                "custom_roles": 9999,
                "duplicates_finder_rules": 20,
                "webhook_providers": true,
                "bank_services": true,
                "estate_property_exporters": true,
                "accounting_provider": true,
                "delivery_service": true,
                "store": false,
                "invite_count": 10,
                "chat_widget": true,
                "chat_integrations": true
            },
            "master-options": {}
        }
    }
}

В данном примере каждый ключ в options идентичен названию ключа в настройках приложения. Подробнее о настройках можно почитать в Кабинете разработчика

Основные атрибуты

Имя Тип Пример Запись Описание
id integer 2 нет идентификатор токена
type oauth-token oauth-token нет тип объекта
self string https://app.synergycrm.ru/api/v1/oauth-token нет адрес запроса
token string bRx2cpE22ZOl2A2UFVJTX2CoVl2gBVg2FR22qMcI-PM нет API Access Token
scopes array ["profile_read"] нет Разрешения
options json {"key":"value"} да Настройки приложения
user_id integer 22 нет ID пользователя владельца токена
created_at datetime 2022-02-22T12:02:22.222+03:00 нет Дата создания
updated_at datetime 2022-02-22T12:02:22.222+03:00 нет Дата обновления
token-label integer 1 нет Порядковый номер токена
subscription-expires-at datetime 2022-02-22T12:02:22.222+03:00 нет Дата окончания подписки
price decimal 0.0 нет цена
license_included integer 2 нет Количество включенных лицензий
license_count integer 9999 нет Количество доступных лицензий для покупки
license_price decimal 1350.0 нет Цена одной лицензии в месяц
license_min_count integer 3 нет Минимальное количество лицензий на аккаунт
default_payment_period integer 3 нет Минимальный срок оплаты лицензий
payment_periods array [3,6,12,24], нет Варианты сроков оплаты лицензий
disabled_payment_periods array [] нет Отключенные варианты сроков оплаты лицензий
discount_map array [6,20],[12,30],[24,40]], нет Варианты скидок
api boolean true нет Доступ к API
scenarios integer 9999 нет Сценарии автоматизаций доступные для создания и работы
dynamic_tabs boolean true нет Динамическе таблицы
document_templates integer 9999 нет Доступаное кол-во шаблонов документов
objects integer 9999 нет Кол-во доступных для создания объектов (контакты, компании, сделки, заявки…)
sms boolean true нет Доступ к SMS интеграциям
telephony boolean true нет Интеграция с BATC
web_form boolean true нет Генерация и работа форм захвата заявок и сделок с сайтов
roistat boolean true нет Интеграция сервиса сквозной аналитики
dadata_from_api boolean false нет Доступ к интеграции с сервисом dadata
manual_scenarios_api boolean false нет Доступ к API-сценариям
mail_count integer 9999 нет Кол-во доступных подключенных почтовых ящиков
mail_method string user нет Метод регистрации
table_filters integer 9999 нет Фильтры в реестрах
custom_fields integer 9999 нет Кол-во доступных дополнительных полей
disabled_custom_types array ["file","formula"] нет Запрещенные типы дополнительных полей
storage boolean true нет Хранилище файлов
import integer 2500 нет Доступное кол-во загружаемых данных в таблицы через механизм импорта
export string "csv,xls" нет Формат файлов для экспорта
analytic integer 100 нет Кол-во доступных отчетов
settings_copy boolean true нет Копирование настроек от одного пользователя другим
card_blocks boolean true нет Карточки объектов системы
invoices boolean true нет Счета в модуле финансы
payments boolean true нет Платежи в модуле финансы
entries boolean true нет Журнал записей
checkups boolean true нет Модуль осмотры (универсальный справочник)
contracts boolean true нет Модуль договоры
contact_groups boolean true нет Группы контактов
recurrence_rules boolean true нет Правила повтора событий
user_salaries boolean true нет Расчет зарплаты сотрудников
indiboards integer 9999 нет Рабочие доски с виджетами с отчетами
org_details integer 2 нет Реквизиты юридических лиц аккаунта
telegram boolean true нет Интеграция с Telegram ботом BotFather в том числе уведомления о событиях в Telegram
sales_funnel integer 9999 нет Кол-во воронок продаж
time_tracking boolean true нет Трекинг отработанного/затраченного времени
ip_security boolean true нет Защита/ограничение доступа по IP-адресу
custom_roles integer 9999 нет Кастомные правда доступа, роли сотрудников в системе
duplicates_finder_rules integer 20 нет Кол-во доступных для создания правил поиска дублей
webhook_providers boolean true нет Работа с вебхуками, вызов в автоматизациях
bank_services boolean true нет Интеграции с банковскими сервисами
estate_property_exporters boolean true нет Экспорт объектов недвижимости
accounting_provider boolean true нет Работа с банковскими реквизитами
delivery_service boolean true нет Интеграция с сервисом отслеживания грузоперевозок и доставки
store boolean true нет Модуль в системе "Склад"
invite_count integer 10 нет Максимальное количество пользователей
chat_widget boolean true нет Модуль "Чаты"
chat_integrations boolean true нет Возможность интегрировать социальные сети и мессенджеры

Контакты

Создание контакта с предустановленным источником и ответственным

curl "https://app.synergycrm.ru/api/v1/contacts" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"contacts",
         "attributes":{
           "first-name":"Иван",
           "last-name":"Иванов"
         },
         "relationships":{
           "source":{
             "data":{
               "type":"sources",
               "id":"2"
             }
           },
           "responsible":{
             "data":{
               "type":"users",
               "id":"2"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/contacts");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"contacts\",\"attributes\":{\"first-name\":\"Иван\",\"last-name\":\"Иванов\"},\"relationships\":{\"source\":{\"data\":{\"type\":\"sources\",\"id\":\"2\"}},\"responsible\":{\"data\":{\"type\":\"users\",\"id\":\"2\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/contacts')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"contacts",
         "attributes":{
           "first-name":"Иван",
           "last-name":"Иванов"
         },
         "relationships":{
           "source":{
             "data":{
               "type":"sources",
               "id":"2"
             }
           },
           "responsible":{
             "data":{
               "type":"users",
               "id":"2"
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"contacts",
         "attributes":{
           "first-name":"Иван",
           "last-name":"Иванов"
         },
         "relationships":{
           "source":{
             "data":{
               "type":"sources",
               "id":"2"
             }
           },
           "responsible":{
             "data":{
               "type":"users",
               "id":"2"
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/contacts", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contacts',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"contacts",
         "attributes":{
           "first-name":"Иван",
           "last-name":"Иванов"
         },
         "relationships":{
           "source":{
             "data":{
               "type":"sources",
               "id":"2"
             }
           },
           "responsible":{
             "data":{
               "type":"users",
               "id":"2"
             }
           }
         }
       }
     }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/contacts"

payload = json.dumps({
       "data":{
         "type":"contacts",
         "attributes":{
           "first-name":"Иван",
           "last-name":"Иванов"
         },
         "relationships":{
           "source":{
             "data":{
               "type":"sources",
               "id":"2"
             }
           },
           "responsible":{
             "data":{
               "type":"users",
               "id":"2"
             }
           }
         }
       }
     })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/contacts'));
  request.body = json.encode({
       "data":{
         "type":"contacts",
         "attributes":{
           "first-name":"Иван",
           "last-name":"Иванов"
         },
         "relationships":{
           "source":{
             "data":{
               "type":"sources",
               "id":"2"
             }
           },
           "responsible":{
             "data":{
               "type":"users",
               "id":"2"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);

  http.StreamedResponse response = await request.send();

  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type contacts
URL /api/v1/contacts
Список GET /api/v1/contacts
Чтение GET /api/v1/contacts/{id}
Создание POST /api/v1/contacts
Редактирование PATCH /api/v1/contacts/{id}
Удаление DELETE /api/v1/contacts/{id}

Атрибуты

Ниже приведен пример формата данных, в реальном ответе будут присутствовать все перечисленные атрибуты

{
  "data": {
      "type":"contacts",
      "id":"2",
      "attributes":{
        "first-name":"Иван",
        "last-name":"Иванов",
        "middle-name": "Иванович",
        "work-phone":"+79876543211",
        "customs":{
          "custom-1":"Значение",
          "custom-943":"2022-02-22T12:02:22.222+03:00"
        },
        "created-at":"2022-02-22T12:02:22.222+03:00",
        "updated-at":"2022-02-22T12:02:22.222+03:00",
        "archived-at": "2022-02-22T12:02:22.222+03:00",
        "cached-at": "2022-02-22T12:02:22.222+03:00",
        "position": "Руководитель отдела",
        "birthdate": null,
        "mobile-phone": "+79876543211",
        "general-phone": "+79876543211",
        "other-phone": "+79876543211",
        "email": "test@mail.ru",
        "other-email": "test@mail.ru",
        "fax": "+79876543211",
        "website": "synergycrm.ru",
        "work-country": "Россия",
        "work-region": "Московская обл.",
        "work-city": "Москва",
        "work-zipcode": "2222222",
        "work-street": "ул. Мира",
        "work-building": "2а",
        "work-housing": "2",
        "work-apartment": "222",
        "home-country": "Росссия",
        "home-region": "Московская обл.",
        "home-city": "Москва",
        "home-zipcode": "2222222",
        "home-street": "ул. Мира",
        "home-building": "2а",
        "home-housing": "2",
        "home-apartment": "222",
        "vkontakte": "vk.com/domen",
        "facebook": "facebook.com",
        "linkedin": "ru.linkedin.com",
        "odnoklassniki": "",
        "instagram": "instagram.com",
        "twitter": "twitter.com",
        "whatsapp": null,
        "viber": null,
        "telegram": null,
        "skype": null,
        "description": "Описание",
        "note": null,
        "initial-balance": null,
        "discarded-at": null,
        "previous-responsible-id": null,
        "utm-source": null,
        "utm-medium": null,
        "utm-campaign": null,
        "utm-term": null,
        "utm-content": null,
        "utm-landing-page": null,
        "utm-city": null,
        "utm-search-query": null,
        "as-string": "Иван Иванов Иванович",
        "sex-code": "201"
      }
   }
}

Основные атрибуты

Имя Тип Пример Запись Описание
first-name* string Иван да Имя
last-name* string Иванов да Фамилия
middle-name string Иванович да Отчество
birthdate date 2022-02-22 да Дата рождения
description string Описание да Описание
general-phone string +79876543211 да Телефон (основной)
mobile-phone string +79876543211 да Телефон (мобильный)
work-phone string +79876543211 да Телефон (рабочий)
work-phone-postfix string 200 да Добавочный (рабочий)
other-phone string +79876543211 да Телефон (дополнительный)
other-phone-postfix string 200 да Добавочный (дополнительный)
fax string +79876543211 да Факс
email string help@synergycrm.ru да E-mail адрес
other-email string help@synergycrm.ru да E-mail адрес (дополнительный)
website string synergycrm.ru да Сайт
customs hash {"custom-1":'custom value'} да Свои поля
created-at datetime 2022-02-22T12:02:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:02:22.222+03:00 нет Дата обновления
archived-at datetime 2022-02-22T12:02:22.222+03:00 да Дата архивации
discarded-at datetime 2022-02-22T12:02:22.222+03:00 да Дата перемещения в корзину
previous-responsible-id integer 100 нет Предыдущий ответственный
sex-code string 201 да Пол контакта("201" - мужской, "202" - женский)

* Обязательные поля

Рабочий адрес

Имя Тип Пример Запись Описание
work-country string Россия да Страна
work-region string Республика Татарстан да Область, регион, край
work-city string Иннополис да Город, населенный пункт
work-zipcode string 012345 да Индекс
work-street string ул. Университетская да Улица, проспект
work-building string 22а да Номер дома
work-housing string 2 да Корпус
work-apartment string 123 да Номер офиса или квартиры

Домашний адрес

Имя Тип Пример Запись Описание
home-country string Россия да Страна
home-region string Москва да Область, регион, край
home-city string Москва да Город, населенный пункт
home-zipcode string 012345 да Индекс
home-street string ул. Кремлевская да Улица, проспект
home-building string 22а да Номер дома
home-housing string 2 да Корпус
home-apartment string 123 да Номер офиса или квартиры

Соц. сети и мессенджеры

Имя Тип Пример Запись Описание
vkontakte string vk.com/domain да ВКонтакте
facebook string facebook.com/domain да Facebook
linkedin string ru.linkedin.com/domain да Linked-in
odnoklassniki string ok.ru/domain да Одноклассники
instagram string instagram.com/domain да Instagram
twitter string twitter.com/domain да Twitter
whatsapp string wa.me/79876543211 да WhatsApp
viber string viber://chat?number=+79876543211 да Viber
telegram string t.me/username да Telegram
skype string skype:(username) да Skype

Связи

Пример данных (перечислены не все связи)

{
  "data": {
      "type":"contacts",
      "id":"2",
      "relationships":{
        "responsible":{
          "links":{
            "self":"/api/v1/contacts/2/relationships/responsible",
            "related":"/api/v1/contacts/2/responsible"
          }
        },
        "contact-type":{
          "links":{
            "self":"/api/v1/contacts/2/relationships/contact-type",
            "related":"/api/v1/contacts/2/contact-type"
          }
        }
      }
   }
}

Пример запроса с загруженными отвественными и типом контакта

curl "https://app.synergycrm.ru/api/v1/contacts?include=responsible,contact-type" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/contacts?include=responsible,contact-type");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/contacts?include=responsible,contact-type')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/contacts?include=responsible,contact-type", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contacts?include=responsible,contact-type',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/contacts?include=responsible,contact-type"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/contacts?include=responsible,contact-type'));

  request.headers.addAll(headers);

  http.StreamedResponse response = await request.send();

  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Получить контакты по связанным реквизитам юридического лица аккаунта (org-detail)

curl -G "http://app.synergycrm.ru/api/v1/contacts?filter[org-detail-id]=2" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Ответственный responsible users
Создатель user users
Источник source sources
Компании companies companies
Статус status contact-statuses
Тип contact-type contact-types
Сделки deals deals
Заявки orders orders
Продукты products products
Спецификации entities-products entity-products
Задачи tasks diary-tasks
События events diary-events
Соисполнители performers users
Счета invoices invoices
Договоры contracts contracts
Сегменты segments segments
Ответственная организация org-detail org-details

Фильтры

Получить список контактов с определённым рабочим номером

curl -G "https://app.synergycrm.ru/api/v1/contacts" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[work_phone]=+79876543211"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/contacts?filter[work_phone]=79876543211");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/contacts?filter[work_phone]=79876543211')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/contacts?filter[work_phone]=79876543211", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contacts?filter[work_phone]=79876543211',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/contacts?filter[work_phone]=79876543211"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/contacts?filter[work_phone]=79876543211'));

  request.headers.addAll(headers);

  http.StreamedResponse response = await request.send();

  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
last-name Вывести контакты по определенному last-name filter[last-name]=Ivanov
middle-name Вывести контакты по определенному middle-name filter[middle-name]=Ivanovich
first-name Вывести контакты по определенному first-name filter[first-name]=Ivan
work-phone Вывести контакты по определенному work-phone filter[work-phone]=+79876543211
mobile-phone Вывести контакты по определенному mobile-phone filter[mobile-phone]=+79876543211
other-phone Вывести контакты по определенному other-phone filter[other-phone]=+79876543211
any-phone Вывести контакты в которых из одном из телефонных полей хранится значение any-phone filter[any_phone]=+79876543211
email Вывести контакты по определенному email filter[email]=test@mail.ru
other-email Вывести контакты по определенному other-email filter[other-email]=test@mail.ru
responsible-id Вывести контакты по определенному ответственному filter[responsible-id]=2
segment-ids Вывести контакты по определенным сегментам filter[segment-ids]=2
segment-process-status-ids Вывести контакты по статусам в сегменте filter[segment-process-status-ids]=2
created-at-gte Вывести контакты созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести контакты созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести контакты обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести контакты обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00
birthdate-gte Вывести контакты с датой рождения после указанной даты filter[birthdate-gte]=1992.12.22
birthdate-lte Вывести контакты с датой рождения до указанной даты filter[birthdate-lte]=1992.12.22
table-state-id Вывести контакты по заданному табличному фильтру filter[table-state-id]=2
q Вывести контакты по поисковому запросу filter[q]=some-query
archived Вывести контакты в архиве filter[archived]=2
discarded Вывести контакты в корзине filter[discarded]=2
actual Вывести актуальные контакты filter[actual]=2
discarded-at-null Вывести контакты не в корзине filter[discarded-at-null]=true
birthdate-null Вывести контакты без дня рождения filter[birthdate-null]=true
org-details Вывести контакты по связанным реквизитам аккаунта org-detail-id filter[org-detail-id]=2

Статусы

Создание статуса контакта

curl "https://app.synergycrm.ru/api/v1/contact-statuses" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"contact-statuses",
         "attributes":{
           "name":"Статус контакта в API",
           "color":"#000000"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/contact-statuses");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"contact-statuses\",\"attributes\":{\"name\":\"Статус контакта в API\",\"color\":\"#000000\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/contact-statuses')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"contact-statuses",
         "attributes":{
           "name":"Статус контакта в API",
           "color":"#000000"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"contact-statuses",
         "attributes":{
           "name":"Статус контакта в API",
           "color":"#000000"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/contact-statuses", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contact-statuses',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"contact-statuses",
         "attributes":{
           "name":"Статус контакта в API",
           "color":"#000000"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/contact-statuses"

payload = json.dumps({
       "data":{
         "type":"contact-statuses",
         "attributes":{
           "name":"Статус контакта в API",
           "color":"#000000"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/contact-statuses'));
  request.body = json.encode({
       "data":{
         "type":"contact-statuses",
         "attributes":{
           "name":"Статус контакта в API",
           "color":"#000000"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type contact-statuses
URL /api/v1/contact-statuses
Список GET /api/v1/contact-statuses
Чтение GET /api/v1/contact-statuses/{id}
Создание POST /api/v1/contact-statuses
Редактирование PATCH /api/v1/contact-statuses/{id}
Удаление DELETE /api/v1/contact-statuses/{id}

Атрибуты

Атрибуты статуса контакта

{
  "data": {
      "type":"contact-statuses",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Мой статус контакта",
        "color": "#1f2f3f"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Мой статус контакта да Имя статуса контакта
color string #1f2f3f да Цвет статуса контакта
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список статусов контактов созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/contact-statuses" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/contact-statuses?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/contact-statuses?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/contact-statuses?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contact-statuses?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/contact-statuses?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/contact-statuses?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести статусы контактов созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести статусы контактов созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести статусы контактов обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести статусы контактов обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Типы

Создание типа контакта

curl "https://app.synergycrm.ru/api/v1/contact-types" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"contact-types",
         "attributes":{
           "name":"Тип контакта в API"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/contact-types");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"contact-types\",\"attributes\":{\"name\":\"Тип контакта в API\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/contact-types')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"contact-types",
         "attributes":{
           "name":"Тип контакта в API"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"contact-types",
         "attributes":{
           "name":"Тип контакта в API"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/contact-types", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contact-types',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"contact-types",
         "attributes":{
           "name":"Тип контакта в API"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/contact-types"

payload = json.dumps({
       "data":{
         "type":"contact-types",
         "attributes":{
           "name":"Тип контакта в API"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/contact-types'));
  request.body = json.encode({
       "data":{
         "type":"contact-types",
         "attributes":{
           "name":"Тип контакта в API"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type contact-types
URL /api/v1/contact-types
Список GET /api/v1/contact-types
Чтение GET /api/v1/contact-types/{id}
Создание POST /api/v1/contact-types
Редактирование PATCH /api/v1/contact-types/{id}
Удаление DELETE /api/v1/contact-types/{id}

Атрибуты

Атрибуты типа контакта

{
  "data": {
      "type":"contact-types",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Мой тип контакта"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Мой тип контакта да Имя типа контакта
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список типов контактов созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/contact-types" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/contact-types?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/contact-types?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/contact-types?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contact-types?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/contact-types?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/contact-types?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести типы контактов, созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести типы контактов, созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести типы контактов, обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести типы контактов, обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Родственные связи

Создание/редактирование родственной связи.

curl "https://app.synergycrm.ru/api/v1/contacts/44/relative" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "contact_id": 43,
       "relation_type": "child"
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/contacts/44/relative");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"contact_id\":43,\"relation_type\":\"child\"}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/contacts/44/relative')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "contact_id": 43,
       "relation_type": "child"
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "contact_id": 43,
       "relation_type": "child"
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/contacts/44/relative", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contacts/44/relative',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "contact_id": 43,
       "relation_type": "child"
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/contacts/44/relative"

payload = json.dumps({
       "contact_id": 43,
       "relation_type": "child"
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/contacts/44/relative'));
  request.body = json.encode({
       "contact_id": 43,
       "relation_type": "child"
     });
  request.headers.addAll(headers);

  http.StreamedResponse response = await request.send();

  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

При передаче данных о родственной связи для контакта, будет создана родственная связь для переданного контакта, согласно таблице:

relation_type Обозначение Наличие кода пола у контакта Генерируемые значения родственной связи у контакта в зависимости от пола
father Отец да '201' => 'son', '202' => 'daughter'
mother Мать да '201' => 'son', '202' => 'daughter'
son Сын да '201' => 'father', '202' => 'mother'
daughter Дочь да '201' => 'father', '202' => 'mother'
brother Брат да '201' => 'brother', '202' => 'sister'
sister Сестра да '201' => 'brother', '202' => 'sister'
husband Муж нет 'wife'
wife Жена нет 'husband'
grandad Прадедушка да '201' => 'grandson', '202' => 'granddaughter'
grandma Прабабушка да '201' => 'grandson', '202' => 'granddaughter'
grandson Правнук да '201' => 'grandad', '202' => 'grandma'
granddaughter Правнучка да '201' => 'grandad', '202' => 'grandma'
uncle Дядя да '201' => 'nephew', '202' => 'niece'
aunt Тётя да '201' => 'nephew', '202' => 'niece'
nephew Племянник да '201' => 'uncle', '202' => 'aunt'
niece Племянница да '201' => 'uncle', '202' => 'aunt'
fosterer Опекун нет 'foster_child'
foster_child Подопечный нет 'fosterer'
legal_representative Законный представитель нет 'child'
child Ребенок нет 'legal_representative'

При передаче связи, требующей пол у контакта, но при его остутсвии, у родственной связи для контакта будет пустое значене

Атрибуты

Имя Тип Пример Описание
contact_id* integer 43 id контакта, с которым создается связь
relation_type* string child Тип родственной связи

* Обязательные поля

Ниже приведен пример формата данных. В реальном ответе будут присутствовать перечисленные атрибуты

{
  "data": [
    {
      "contact_id": 44,
      "relation_type": "legal_representative"
    },
    {
      "contact_id": 43,
      "relation_type": "child"
    }
  ]
}

Компании

Создание компании с предустановленным источником и ответственным

curl "https://app.synergycrm.ru/api/v1/companies" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"companies",
         "attributes":{
           "name":"ООО Синергия Софт",
           "description":"Разработка компьютерного программного обеспечения"
         },
         "relationships":{
           "source":{
             "data":{
               "type":"sources",
               "id":"2"
             }
           },
           "responsible":{
             "data":{
               "type":"users",
               "id":"2"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/companies");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"companies\",\"attributes\":{\"name\":\"ООО Синергия Софт\",\"description\":\"Разработка компьютерного программного обеспечения\"},\"relationships\":{\"source\":{\"data\":{\"type\":\"sources\",\"id\":\"2\"}},\"responsible\":{\"data\":{\"type\":\"users\",\"id\":\"2\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/companies')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"companies",
         "attributes":{
           "name":"ООО Синергия Софт",
           "description":"Разработка компьютерного программного обеспечения"
         },
         "relationships":{
           "source":{
             "data":{
               "type":"sources",
               "id":"2"
             }
           },
           "responsible":{
             "data":{
               "type":"users",
               "id":"2"
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"companies",
         "attributes":{
           "name":"ООО Синергия Софт",
           "description":"Разработка компьютерного программного обеспечения"
         },
         "relationships":{
           "source":{
             "data":{
               "type":"sources",
               "id":"2"
             }
           },
           "responsible":{
             "data":{
               "type":"users",
               "id":"2"
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/companies", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/companies',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"companies",
         "attributes":{
           "name":"ООО Синергия Софт",
           "description":"Разработка компьютерного программного обеспечения"
         },
         "relationships":{
           "source":{
             "data":{
               "type":"sources",
               "id":"2"
             }
           },
           "responsible":{
             "data":{
               "type":"users",
               "id":"2"
             }
           }
         }
       }
     }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/companies"

payload = json.dumps({
       "data":{
         "type":"companies",
         "attributes":{
           "name":"ООО Синергия Софт",
           "description":"Разработка компьютерного программного обеспечения"
         },
         "relationships":{
           "source":{
             "data":{
               "type":"sources",
               "id":"2"
             }
           },
           "responsible":{
             "data":{
               "type":"users",
               "id":"2"
             }
           }
         }
       }
     })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/companies'));
  request.body = json.encode({
       "data":{
         "type":"companies",
         "attributes":{
           "name":"ООО Синергия Софт",
           "description":"Разработка компьютерного программного обеспечения"
         },
         "relationships":{
           "source":{
             "data":{
               "type":"sources",
               "id":"2"
             }
           },
           "responsible":{
             "data":{
               "type":"users",
               "id":"2"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type companies
URL /api/v1/companies
Список GET /api/v1/companies
Чтение GET /api/v1/companies/{id}
Создание POST /api/v1/companies
Редактирование PATCH /api/v1/companies/{id}
Удаление DELETE /api/v1/companies/{id}

Атрибуты

Атрибуты компании

{
    "data": {
      "type":"companies",
      "id":"2",
      "attributes":{
        "created-at": "2022-02-22T12:02:22.222+03:00",
        "updated-at": "2022-02-22T12:02:22.222+03:00",
        "name": "ООО Синергия Софт",
        "general-phone": "79876543211",
        "work-phone": "79876543211",
        "mobile-phone": "79876543211",
        "other-phone": "79876543211",
        "fax": "79876543211",
        "country": "Россия",
        "city": "Иннополис",
        "region": "Республика Татарстан",
        "address": "Университетская ул, д. 7, помещ. 503",
        "zip-code": "012345",
        "email": "email@mail.ru",
        "other-email": "mail@gmail.com",
        "website": "www.site.com",
        "juristic-country": "Россия",
        "juristic-region": "Республика Татарстан",
        "juristic-city": "Иннополис",
        "juristic-zip-code": "012345",
        "juristic-street": "Университетская",
        "juristic-house": "1",
        "juristic-build": "1",
        "juristic-office": "1",
        "actual-country": "Россия",
        "actual-region": "Республика Татарстан",
        "actual-city": "Иннополис",
        "actual-zip-code": "012345",
        "actual-street": "ул. Университетская",
        "actual-house": "22а",
        "actual-build": "2",
        "actual-office": "123",
        "mailing-country": "Россия",
        "mailing-region": "Республика Татарстан",
        "mailing-city": "Иннополис",
        "mailing-zip-code": "012345",
        "mailing-street": "Университетская",
        "mailing-house": "1",
        "mailing-build": "1",
        "mailing-office": "1",
        "inn": "0101010101",
        "description": "Разработка компьютерного программного обеспечения",
        "full-name": "Общество с ограниченной ответственностью Синергия Софт",
        "short-name": "ООО Синергия Софт",
        "ogrn": "0101010101010",
        "kpp": "010101010",
        "okved": "62.01",
        "manager-name": "Сидоров В.В.",
        "manager-position": "Генеральный директор",
        "lawfulness-base": null,
        "accountant": "Иванов И.И.",
        "customs": {
          "custom-98": "",
          "custom-9": ""
        },
        "discarded-at": null,
        "utm-source": null,
        "utm-medium": null,
        "utm-campaign": null,
        "utm-term": null,
        "utm-content": null,
        "utm-landing-page": null,
        "utm-city": null,
        "utm-search-query": null,
        "archived-at": null
      }
   }
}

Основные атрибуты

Имя Тип Пример Запись Описание  
name* string ООО Синергия Софт да Название  
description string Разработка компьютерного программного обеспечения да Описание  
general-phone string +79876543211 да Телефон (основной)  
mobile-phone string +79876543211 да Телефон (мобильный)  
work-phone string +79876543211 да Телефон (рабочий)  
work-phone-postfix string 200 да Добавочный (рабочий)  
other-phone string +79876543211 да Телефон (дополнительный)  
other-phone-postfix string 200 да Добавочный (дополнительный)  
fax string +79876543211 да Факс  
email string help@synergycrm.ru да E-mail адрес  
other-email string help@synergycrm.ru да E-mail адрес (дополнительный)  
website string synergycrm.ru да Сайт  
country string РФ да Страна  
region string Республика Татарстан да Регион  
city string Иннополис да Город  
address string Университетская ул, д. 7, помещ. 503 да Адрес  
zip-code string 012345 да Индекс  
custom hash {"custom-1":'custom value'} да Свои поля  
created-at datetime 2022-02-22T12:02:22.222+03:00 да Дата создания  
updated-at datetime 2022-02-22T12:02:22.222+03:00 нет Дата обновления  
archived-at datetime 2022-02-22T12:02:22.222+03:00 да Дата архивации  
  discarded-at datetime 2022-02-22T12:02:22.222+03:00 да Дата перемещения в корзину
  previous-responsible-id integer 100 нет Предыдущий ответственный

* Обязательные поля

Фактический адрес

Имя Тип Пример Запись Описание
actual-country string Россия да Страна
actual-region string Республика Татарстан да Область, регион, край
actual-city string Иннополис да Город, населенный пункт
actual-zip-code string 012345 да Индекс
actual-street string ул. Университетская да Улица, проспект
actual-house string 22а да Номер дома
actual-build string 2 да Корпус
actual-office string 123 да Номер офиса

Юридический адрес

Имя Тип Пример Запись Описание
juristic-country string Россия да Страна
juristic-region string Республика Татарстан да Область, регион, край
juristic-city string Иннополис да Город, населенный пункт
juristic-zip-code string 012345 да Индекс
juristic-street string ул. Университетская да Улица, проспект
juristic-house string 22а да Номер дома
juristic-build string 2 да Корпус
juristic-office string 123 да Номер офиса

Почтовый адрес

Имя Тип Пример Запись Описание
mailing-country string Россия да Страна
mailing-region string Республика Татарстан да Область, регион, край
mailing-city string Иннополис да Город, населенный пункт
mailing-zip-code string 012345 да Индекс
mailing-street string ул. Университетская да Улица, проспект
mailing-house string 22а да Номер дома
mailing-build string 2 да Корпус
mailing-office string 123 да Номер офиса

Реквизиты

Имя Тип Пример Запись Описание
full-name string Общество с ограниченной ответственностью да Полное наименование
short-name string ООО "Синергия Софт" да Короткое наименование
inn string 0101010101 да ИНН
ogrn string 0101010101010 да ОГРН
kpp string 010101010 да КПП
okved string 62.01 да ОКВЭД
director string Иванов И.И. да Директор
accountant string Иванов И.И. да Бухгалтер
lawfulness-base string Значение да Правомочность
manager-name string Сидоров В.В. да ФИО руководителя
manager-position string Генеральный директор да Должность руководителя
руководителя        

UTM метки

Имя Тип Пример Запись Описание
utm-source string yandex-direct да Рекламная система
utm-medium string cpc да Тип трафика
utm-campaign string cosmetic да Название рекламной кампании
utm-term string shampoo да Ключевое слово, которое инициировало показ объявления
utm-content string some text да Информация, которая помогает различать объявления, если совпадают другие параметры
utm-landing-page string somesite.ru/path да Адрес посадочной страницы
utm-city string Москва да Город

Связи

Пример данных (перечислены не все связи)

{
    "data": {
      "type":"companies",
      "id":"2",
      "relationships":{
        "responsible":{
          "links":{
            "self":"/api/v1/contacts/2/relationships/responsible",
            "related":"/api/v1/contacts/2/responsible"
          }
        },
        "company-type":{
          "links":{
            "self":"/api/v1/contacts/2/relationships/company-type",
            "related":"/api/v1/contacts/2/company-type"
          }
        }
      }
   }
}

Пример запроса с загруженными отвественными и типом компании

curl "https://app.synergycrm.ru/api/v1/companies?include=responsible,company-type" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/companies?include=responsible,company-type");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/companies?include=responsible,company-type')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/companies?include=responsible,company-type", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/companies?include=responsible,company-type',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/companies?include=responsible,company-type"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/companies?include=responsible,company-type'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Получить компании по связанным реквизитам юридического лица аккаунта (org-detail)

curl -G "http://app.synergycrm.ru/api/v1/companies?filter[org-detail-id]=2" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Ответственный responsible users
Создатель user users
Источник source sources
Контакты contacts contacts
Статус status company-statuses
Тип company-type company-types
Сделки deals deals
Продукты products products
Спецификации entities-products entity-products
Задачи tasks diary-tasks
События events diary-events
Банк. реквизиты bank-details company-bank-details
Соисполнители performers users
Счета invoices invoices
Договоры contracts contracts
Осмотры checkups checkups
Сегменты segments segments
Ответственная организация org-detail org-details

Фильтры

Получить список компаний с определённым рабочим номером

curl -G "https://app.synergycrm.ru/api/v1/companies" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[general_phone]=+79876543211"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/companies?filter[general_phone]=79876543211");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/companies?filter[general_phone]=79876543211')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/companies?filter[general_phone]=79876543211", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/companies?filter[general_phone]=79876543211',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/companies?filter[general_phone]=79876543211"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/companies?filter[general_phone]=79876543211'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
inn Вывести компании по определенному номеру ИНН filter[inn]=000000000
kpp Вывести компании по определенному номеру КПП filter[kpp]=000000000
work-phone Вывести компании по определенному work-phone filter[work-phone]=+79876543211
general-phone Вывести компании по определенному general-phone filter[general-phone]=+79876543211
other-phone Вывести компании по определенному other-phone filter[other-phone]=+79876543211
any-phone Вывести компании в которых из одном из телефонных полей хранится значение any-phone filter[any_phone]=+79876543211
email Вывести компании по определенному email filter[email]=mail@test.ru
other-email Вывести компании по определенному other-email filter[other-email]=mail@test.ru
responsible-id Вывести компании по определенному ответственному filter[responsible-id]=2
segment-ids Вывести компании по определенным сегментам filter[segment-ids]=2
segment-process-status-ids Вывести компании по статусам в сегменте filter[segment-process-status-ids]=2
created-at-gte Вывести компании созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести компании созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести компании обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести компании обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00
table-state-id Вывести компании по заданному табличному фильтру filter[table-state-id]=2
q Вывести компании по поисковому запросу filter[q]=some-query
archived Вывести компании в архиве filter[archived]=2
discarded Вывести компании в корзине filter[discarded]=2
actual Вывести актуальные компании filter[actual]=2
discarded-at-null Вывести компании не в корзине filter[discarded-at-null]=true
org-details Вывести компании по связанным реквизитам аккаунта org-detail-id filter[org-detail-id]=2

Банковские реквизиты

Создание банковских реквизитов для компании

curl "https://app.synergycrm.ru/api/v1/company-bank-details" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"company-bank-details",
         "attributes":{
           "name":"МОЕ НАЗВАНИЕ БАНКОВСКИХ РЕКВИЗИТОВ"
         },
         "relationships":{
           "company":{
             "data":{
               "type":"companies",
               "id":2
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/company-bank-details");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"company-bank-details\",\"attributes\":{\"name\":\"МОЕ НАЗВАНИЕ БАНКОВСКИХ РЕКВИЗИТОВ\"},\"relationships\":{\"company\":{\"data\":{\"type\":\"companies\",\"id\":2}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/company-bank-details')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"company-bank-details",
         "attributes":{
           "name":"МОЕ НАЗВАНИЕ БАНКОВСКИХ РЕКВИЗИТОВ"
         },
         "relationships":{
           "company":{
             "data":{
               "type":"companies",
               "id":2
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"company-bank-details",
         "attributes":{
           "name":"МОЕ НАЗВАНИЕ БАНКОВСКИХ РЕКВИЗИТОВ"
         },
         "relationships":{
           "company":{
             "data":{
               "type":"companies",
               "id":2
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/company-bank-details", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/company-bank-details',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"company-bank-details",
         "attributes":{
           "name":"МОЕ НАЗВАНИЕ БАНКОВСКИХ РЕКВИЗИТОВ"
         },
         "relationships":{
           "company":{
             "data":{
               "type":"companies",
               "id":2
             }
           }
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/company-bank-details"

payload = json.dumps({
       "data":{
         "type":"company-bank-details",
         "attributes":{
           "name":"МОЕ НАЗВАНИЕ БАНКОВСКИХ РЕКВИЗИТОВ"
         },
         "relationships":{
           "company":{
             "data":{
               "type":"companies",
               "id":2
             }
           }
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/company-bank-details'));
  request.body = json.encode({
       "data":{
         "type":"company-bank-details",
         "attributes":{
           "name":"МОЕ НАЗВАНИЕ БАНКОВСКИХ РЕКВИЗИТОВ"
         },
         "relationships":{
           "company":{
             "data":{
               "type":"companies",
               "id":2
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type company-bank-details
URL /api/v1/company-bank-details
Список GET /api/v1/company-bank-details
Чтение GET /api/v1/company-bank-details/{id}
Создание POST /api/v1/company-bank-details
Редактирование PATCH /api/v1/company-bank-details/{id}
Удаление DELETE /api/v1/company-bank-details/{id}

Атрибуты

Атрибуты банковских реквизитов компании

{
  "data":{
      "id": "2",
      "type": "company-bank-details",
      "attributes":{
          "created-at": "2022-02-22T12:22:22.222+03:00",
          "updated-at": "2022-02-22T12:22:22.222+03:00",
          "name": "МОЕ НАЗВАНИЕ БАНКОВСКИХ РЕКВИЗИТОВ",
          "bank-name": "ПАО СБЕРБАНК",
          "bik": "000000000",
          "corr-number": "00000000000000000000",
          "number": "00000000000000000000",
          "is-default": true,
          "active": true
      }
  }
}
Имя Тип Пример Запись Описание
name* string МОЕ НАЗВАНИЕ БАНКОВСКИХ РЕКВИЗИТОВ да Название набора реквизитов
bank-name string ПАО СБЕРБАНК да Имя банка
bik string 000000000 да БИК банка
corr-number string 00000000000000000000 да Корр. счет
number string 00000000000000000000 да Номер счета
is-default boolean true да Основные реквизиты?
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры банковских реквизитов

Получить список банковских реквизитов, созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/company-bank-details" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/company-bank-details?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/company-bank-details?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/company-bank-details?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/company-bank-details?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/company-bank-details?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/company-bank-details?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести банковские реквизиты созданные в системе после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести банковские реквизиты созданные в системе до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести банковские реквизиты обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести банковские реквизиты обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00
bik Вывести банковские реквизиты по БИК банка filter[bik]=010101010
number Вывести банковские реквизиты по номеру счета filter[number]=01010101010101010101

Связи

Загрузка банковских реквизитов по определенной компании (id = 2)

curl "https://app.synergycrm.ru/api/v1/companies/2/relationships/bank-details" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/companies/2/relationships/bank-details");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/companies/2/relationships/bank-details')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/companies/2/relationships/bank-details", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/companies/2/relationships/bank-details',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/companies/2/relationships/bank-details"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/companies/2/relationships/bank-details'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Название Связь JSON API type
Компания company companies

Статусы

Создание статуса компании

curl "https://app.synergycrm.ru/api/v1/company-statuses" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"company-statuses",
         "attributes":{
           "name":"Статус компании из API",
           "color":"#000000"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/company-statuses");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"company-statuses\",\"attributes\":{\"name\":\"Статус компании из API\",\"color\":\"#000000\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/company-statuses')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"company-statuses",
         "attributes":{
           "name":"Статус компании из API",
           "color":"#000000"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"company-statuses",
         "attributes":{
           "name":"Статус компании из API",
           "color":"#000000"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/company-statuses", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/company-statuses',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"company-statuses",
         "attributes":{
           "name":"Статус компании из API",
           "color":"#000000"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/company-statuses"

payload = json.dumps({
       "data":{
         "type":"company-statuses",
         "attributes":{
           "name":"Статус компании из API",
           "color":"#000000"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/company-statuses'));
  request.body = json.encode({
       "data":{
         "type":"company-statuses",
         "attributes":{
           "name":"Статус компании из API",
           "color":"#000000"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type company-statuses
URL /api/v1/company-statuses
Список GET /api/v1/company-statuses
Чтение GET /api/v1/company-statuses/{id}
Создание POST /api/v1/company-statuses
Редактирование PATCH /api/v1/company-statuses/{id}
Удаление DELETE /api/v1/company-statuses/{id}

Атрибуты

Атрибуты статуса компании

{
  "data": {
      "type":"company-statuses",
      "id":"2",
      "attributes":{
        "created-at": "2022-02-22T12:22:22.222+03:00",
        "updated-at": "2022-02-22T12:22:22.222+03:00",
        "name": "Мой статус компании",
        "color": "#1f2f3f"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Мой статус компании да Имя статуса компании
color string #1f2f3f да Цвет статуса компании
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список статусов компаний созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/company-statuses" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/company-statuses?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/company-statuses?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/company-statuses?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/company-statuses?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/company-statuses?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/company-statuses?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести объекты созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести объекты созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести объекты обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести объекты обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Типы

Создание типа компании

curl "https://app.synergycrm.ru/api/v1/company-types" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"company-types",
         "attributes":{
           "name":"Тип компании из API"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/company-types");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"company-types\",\"attributes\":{\"name\":\"Тип компании из API\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/company-types')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"company-types",
         "attributes":{
           "name":"Тип компании из API"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"company-types",
         "attributes":{
           "name":"Тип компании из API"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/company-types", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/company-types',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"company-types",
         "attributes":{
           "name":"Тип компании из API"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/company-types"

payload = json.dumps({
       "data":{
         "type":"company-types",
         "attributes":{
           "name":"Тип компании из API"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/company-types'));
  request.body = json.encode({
       "data":{
         "type":"company-types",
         "attributes":{
           "name":"Тип компании из API"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type company-types
URL /api/v1/company-types
Список GET /api/v1/company-types
Чтение GET /api/v1/company-types/{id}
Создание POST /api/v1/company-types
Редактирование PATCH /api/v1/company-types/{id}
Удаление DELETE /api/v1/company-types/{id}

Атрибуты

Атрибуты типа компании

{
  "data": {
      "type":"company-types",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Мой тип компании"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Мой тип компании да Имя типа компании
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список типов компаний созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/company-types" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/company-types?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/company-types?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/company-types?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/company-types?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/company-types?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/company-types?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести типы компаний созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести типы компаний созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести типы компаний обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести типы компаний обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Сделки

Создание сделки с предустановленным источником

curl "https://app.synergycrm.ru/api/v1/deals" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"deals",
         "attributes":{
           "name":"Сделка по API",
           "planned-at":"2022-02-22"
         },
         "relationships":{
           "source":{
             "data":{
               "type":"sources",
               "id":"2"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/deals");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"deals\",\"attributes\":{\"name\":\"Сделка по API\",\"planned-at\":\"2022-02-22\"},\"relationships\":{\"source\":{\"data\":{\"type\":\"sources\",\"id\":\"2\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/deals')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"deals",
         "attributes":{
           "name":"Сделка по API",
           "planned-at":"2022-02-22"
         },
         "relationships":{
           "source":{
             "data":{
               "type":"sources",
               "id":"2"
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"deals",
         "attributes":{
           "name":"Сделка по API",
           "planned-at":"2022-02-22"
         },
         "relationships":{
           "source":{
             "data":{
               "type":"sources",
               "id":"2"
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/deals", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deals',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"deals",
         "attributes":{
           "name":"Сделка по API",
           "planned-at":"2022-02-22"
         },
         "relationships":{
           "source":{
             "data":{
               "type":"sources",
               "id":"2"
             }
           }
         }
       }
     }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/deals"

payload = json.dumps({
       "data":{
         "type":"deals",
         "attributes":{
           "name":"Сделка по API",
           "planned-at":"2022-02-22"
         },
         "relationships":{
           "source":{
             "data":{
               "type":"sources",
               "id":"2"
             }
           }
         }
       }
     })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/deals'));
  request.body = json.encode({
       "data":{
         "type":"deals",
         "attributes":{
           "name":"Сделка по API",
           "planned-at":"2022-02-22"
         },
         "relationships":{
           "source":{
             "data":{
               "type":"sources",
               "id":"2"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Создание сделки с привязанной заявкой

curl "https://app.synergycrm.ru/api/v1/deals" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"deals",
         "attributes":{
           "name":"Сделка по API с привязанной заявкой"
         },
         "relationships":{
            "orders": {
              "data" : [{
                "type": "orders",
                "id": 22222
              }]
            }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/deals");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"deals\",\"attributes\":{\"name\":\"Сделка по API с привязанной заявкой\"},\"relationships\":{\"orders\": {\"data\" : [{\"type\": \"orders\",\"id\": 22222}]}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/deals')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"deals",
         "attributes":{
           "name":"Сделка по API с привязанной заявкой"
         },
         "relationships":{
            "orders": {
              "data" : [{
                "type": "orders",
                "id": 22222
              }]
            }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"deals",
         "attributes":{
           "name":"Сделка по API с привязанной заявкой"
         },
         "relationships":{
            "orders": {
              "data" : [{
                "type": "orders",
                "id": 22222
              }]
            }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/deals", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deals',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"deals",
         "attributes":{
           "name":"Сделка по API с привязанной заявкой"
         },
         "relationships":{
            "orders": {
              "data" : [{
                "type": "orders",
                "id": 22222
              }]
            }
         }
       }
     }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/deals"

payload = json.dumps({
       "data":{
         "type":"deals",
         "attributes":{
           "name":"Сделка по API с привязанной заявкой"
         },
         "relationships":{
            "orders": {
              "data" : [{
                "type": "orders",
                "id": 22222
              }]
            }
         }
       }
     })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/deals?filter[created-at-gte]=2022.02.22 12:00'));
  request.body = json.encode({
       "data":{
         "type":"deals",
         "attributes":{
           "name":"Сделка по API с привязанной заявкой"
         },
         "relationships":{
            "orders": {
              "data" : [{
                "type": "orders",
                "id": 22222
              }]
            }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Создание сделки с привязанными продуктами

curl "https://app.synergycrm.ru/api/v1/deals" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"deals",
         "attributes":{
           "name":"Сделка по API с привязанными продуктами"
         },
         "relationships":{
            "products": {
              "data" : [{
                "type": "products",
                "id": 2222
              }, {
                "type": "products",
                "id": 222
              }]
            }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/deals");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"deals\",\"attributes\":{\"name\":\"Сделка по API с привязанными продуктами\"},\"relationships\":{\"products\": {\"data\" : [{\"type\": \"products\",\"id\": 2222}, {\"type\": \"products\",\"id\": 222}]}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/deals')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"deals",
         "attributes":{
           "name":"Сделка по API с привязанными продуктами"
         },
         "relationships":{
            "products": {
              "data" : [{
                "type": "products",
                "id": 2222
              }, {
                "type": "products",
                "id": 222
              }]
            }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"deals",
         "attributes":{
           "name":"Сделка по API с привязанными продуктами"
         },
         "relationships":{
            "products": {
              "data" : [{
                "type": "products",
                "id": 2222
              }, {
                "type": "products",
                "id": 222
              }]
            }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/deals", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deals',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"deals",
         "attributes":{
           "name":"Сделка по API с привязанными продуктами"
         },
         "relationships":{
            "products": {
              "data" : [{
                "type": "products",
                "id": 2222
              }, {
                "type": "products",
                "id": 222
              }]
            }
         }
       }
     }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/deals"

payload = json.dumps({
       "data":{
         "type":"deals",
         "attributes":{
           "name":"Сделка по API с привязанными продуктами"
         },
         "relationships":{
            "products": {
              "data" : [{
                "type": "products",
                "id": 2222
              }, {
                "type": "products",
                "id": 222
              }]
            }
         }
       }
     })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/deals?filter[created-at-gte]=2022.02.22 12:00'));
  request.body = json.encode({
       "data":{
         "type":"deals",
         "attributes":{
           "name":"Сделка по API с привязанными продуктами"
         },
         "relationships":{
            "products": {
              "data" : [{
                "type": "products",
                "id": 2222
              }, {
                "type": "products",
                "id": 222
              }]
            }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type deals
URL /api/v1/deals
Список GET /api/v1/deals
Чтение GET /api/v1/deals/{id}
Создание POST /api/v1/deals
Редактирование PATCH /api/v1/deals/{id}
Удаление DELETE /api/v1/deals/{id}

Атрибуты

Атрибуты сделки

{
  "data": {
    "type":"deals",
    "id":"2",
    "attributes":{
      "name":"Моя сделка",
      "description":"Мое описание сделки",
      "amount":2200000.0,
      "number":22,
      "planned-at":null,
      "finished-at":"2022-02-22",
      "customs":{
        "custom-1":"Значение",
        "custom-943":"2022-02-22T12:02:22.222+03:00"
      },
      "created-at":"2022-02-22T12:02:22.222+03:00",
      "updated-at":"2022-02-22T12:02:22.222+03:00",
      "archived-at":null,
      "utm-source": null,
      "utm-medium": null,
      "utm-campaign": null,
      "utm-term": null,
      "utm-content": null,
      "utm-landing-page": null,
      "utm-city": null,
      "utm-search-query": null
    }
  }
}

Основные атрибуты

Имя Тип Пример Запись Описание
name string Моя сделка да Имя сделки
description string Описание сделки да Подробное описание сделки
loss-comment string Причина поражения да Причина поражения в свободной форме
amount decimal 222.0 да Сумма сделки
cost decimal 222.0 да Себестомость сделки
profit decimal 222.0 нет Прибыль сделки
number integer 22 да Номер сделки
planned-at date 2022-02-22 да Планируемая дата закрытия
finished-at date 2022-02-22 да Фактическая дата закрытия
customs hash {"custom-1":'custom value'} да Свои поля
created-at datetime 2022-02-22T12:02:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:02:22.222+03:00 нет Дата обновления
archived-at datetime 2022-02-22T12:02:22.222+03:00 да Дата архивации
previous-responsible-id integer 100 нет Предыдущий ответственный

UTM метки

Имя Тип Пример Запись Описание
utm-source string yandex-direct да Рекламная система
utm-medium string cpc да Тип трафика
utm-campaign string cosmetic да Название рекламной кампании
utm-term string shampoo да Ключевое слово, которое инициировало показ объявления
utm-content string some text да Информация, которая помогает различать объявления, если совпадают другие параметры
utm-landing-page string somesite.ru/path да Адрес посадочной страницы
utm-city string Москва да Город

Связи

Пример данных (перечислены не все связи)

{
  "data": {
    "type":"deals",
    "id":"2",
    "relationships":{
      "responsible":{
        "links":{
          "self":"/api/v1/deals/2/relationships/responsible",
          "related":"/api/v1/deals/2/responsible"
        }
      },
      "stage-category":{
        "links":{
          "self":"/api/v1/deals/2/relationships/stage-category",
          "related":"/api/v1/deals/2/stage-category"
        }
      }
    }
  }
}

Пример запроса с загруженными источниками и отвественными

curl "https://app.synergycrm.ru/api/v1/deals?include=source,responsible" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/deals?include=source,responsible");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/deals?include=source,responsible')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/deals?include=source,responsible", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deals?include=source,responsible',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/deals?include=source,responsible"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/deals?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Получить сделки по связанным реквизитам юридического лица аккаунта (org-detail)

curl -G "http://app.synergycrm.ru/api/v1/deals?filter[org-detail-id]=2" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Ответственный responsible users
Создатель user users
Компания company companies
Контакт contact contacts
Этап stage deal-stages
Воронка stage-category deal-stage-categories
Источник source sources
Статус status deal-statuses
Причина поражения loss-reason deal-loss-reasons
Конкурент поражения loss-competitor competitors
Территория area areas
Продукты products products
Сделки deals deals
Заявки orders orders
Спецификации entities-products entity-products
Задачи tasks diary-tasks
Файлы documents documents
Счета invoices invoices
Договоры contracts contracts
Сегменты segments segments
Ответственная организация org-detail org-details

Фильтры

Получить список сделок созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/deals" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/deals?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/deals?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/deals?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deals?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/deals?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/deals?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
responsible-id Вывести сделки по определенному ответственному filter[responsible-id]=2
deal-status-id Вывести сделки по статусу сделки filter[deal-status-id]=2
deal-stage-id Вывести сделки по этапу сделки filter[deal-stage-id]=2
deal-stage-category-id Вывести сделки по воронке filter[deal-stage-category-id]=2
related-contacts-ids Вывести сделки по определенным контактам filter[related-contacts-ids]=2
related-companies-ids Вывести сделки по определенным компаниям filter[related-companies-ids]=2
segment-ids Вывести сделки по определенным сегментам filter[segment-ids]=2
segment-process-status-ids Вывести сделки по статусам в сегменте filter[segment-process-status-ids]=2
created-at-gte Вывести сделки созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести сделки созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести сделки обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести сделки обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00
table-state-id Вывести сделки по заданному табличному фильтру filter[table-state-id]=2
q Вывести сделки по поисковому запросу filter[q]=some-query
archived Вывести сделки в архиве filter[archived]=2
discarded Вывести сделки в корзине filter[discarded]=2
actual Вывести актуальные сделки filter[actual]=2
discarded-at-null Вывести сделки не в корзине filter[discarded-at-null]=true
org-details Вывести сделки по связанным реквизитам аккаунта org-detail-id filter[org-detail-id]=2

Причины поражения

Создание причины поражения сделок

curl "https://app.synergycrm.ru/api/v1/deal-loss-reasons" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"deal-loss-reasons",
         "attributes":{
           "name":"Причины поражения из API"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/deal-loss-reasons");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"deal-loss-reasons\",\"attributes\":{\"name\":\"Причины поражения из API\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/deal-loss-reasons')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"deal-loss-reasons",
         "attributes":{
           "name":"Причины поражения из API"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"deal-loss-reasons",
         "attributes":{
           "name":"Причины поражения из API"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/deal-loss-reasons", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deal-loss-reasons',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"deal-loss-reasons",
         "attributes":{
           "name":"Причины поражения из API"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/deal-loss-reasons"

payload = json.dumps({
       "data":{
         "type":"deal-loss-reasons",
         "attributes":{
           "name":"Причины поражения из API"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/deal-loss-reasons'));
  request.body = json.encode({
       "data":{
         "type":"deal-loss-reasons",
         "attributes":{
           "name":"Причины поражения из API"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type deal-loss-reasons
URL /api/v1/deal-loss-reasons
Список GET /api/v1/deal-loss-reasons
Чтение GET /api/v1/deal-loss-reasons/{id}
Создание POST /api/v1/deal-loss-reasons
Редактирование PATCH /api/v1/deal-loss-reasons/{id}
Удаление DELETE /api/v1/deal-loss-reasons/{id}

Атрибуты

Атрибуты причины поражения по сделке

{
  "data": {
      "type":"deal-loss-reasons",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Моя причина поражения"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Моя причина поражения да Название причины поражения сделки
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список причин поражений сделок созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/deal-loss-reasons" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/deal-loss-reasons?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/deal-loss-reasons?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/deal-loss-reasons?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deal-loss-reasons?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/deal-loss-reasons?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/deal-loss-reasons?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести причины поражения, созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести причины поражения, созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести причины поражения, обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести причины поражения, обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Воронки

Создание новой категории этапов сделки

curl "https://app.synergycrm.ru/api/v1/deal-stage-categories" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"deal-stage-categories",
         "attributes":{
           "name":"Воронка сделок из API"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/deal-stage-categories");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"deal-stage-categories\",\"attributes\":{\"name\":\"Воронка сделок из API\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/deal-stage-categories')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"deal-stage-categories",
         "attributes":{
           "name":"Воронка сделок из API"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"deal-stage-categories",
         "attributes":{
           "name":"Воронка сделок из API"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/deal-stage-categories", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deal-stage-categories',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"deal-stage-categories",
         "attributes":{
           "name":"Воронка сделок из API"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/deal-stage-categories"

payload = json.dumps({
       "data":{
         "type":"deal-stage-categories",
         "attributes":{
           "name":"Воронка сделок из API"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/deal-stage-categories'));
  request.body = json.encode({
       "data":{
         "type":"deal-stage-categories",
         "attributes":{
           "name":"Воронка сделок из API"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type deal-stage-categories
URL /api/v1/deal-stage-categories
Список GET /api/v1/deal-stage-categories
Чтение GET /api/v1/deal-stage-categories/{id}
Создание POST /api/v1/deal-stage-categories
Редактирование PATCH /api/v1/deal-stage-categories/{id}
Удаление DELETE /api/v1/deal-stage-categories/{id}

Атрибуты

Атрибуты воронки сделок

{
  "data": {
      "type":"deal-stage-categories",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Воронка сделок",
        "calculation-method": "by_billings",
        "is-default": true,
        "win-by-diaries": false
      }
   }
}
Имя Тип Пример Запись Описание
name* string Воронка сделок да Название воронки
amount-calc-method* string invoices да Способ расчета суммы сделки
cost-calc-method* string payments да Способ расчета себестоимости сделки
amount-calc-field string custom_1 да Поле формулы при расчете суммы сделки по формуле
cost-calc-field string custom_2 да Поле формулы при расчете себестоимости сделки по формуле
is-default boolean true да По-умолчанию
win-by-diaries boolean false да Cчитать сделку выиграной, eсли все задачи выполнены
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Ограничения по значениям

Аттрибут Варианты
amount-calc-method manually, invoices, products, payments, formula
cost-calc-method manually, products, payments, formula

Фильтры

Получить список категорий этапов сделок созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/deal-stage-categories" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/deal-stage-categories?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/deal-stage-categories?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/deal-stage-categories?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deal-stage-categories?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/deal-stage-categories?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/deal-stage-categories?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести воронки сделок, созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести воронки сделок, созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести воронки сделок, обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести воронки сделок, обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Этапы

Создание нового этапа сделки

curl "https://app.synergycrm.ru/api/v1/deal-stages" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
        "data":{
          "type":"deal-stages",
          "attributes":{
            "name":"Этап сделки в API"
          },
          "relationships":{
             "deal-stage-category": {
                "data": {
                    "type": "deal-stage-categories",
                    "id": 2
                }
             }
          }
        }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/deal-stages");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"deal-stages\",\"attributes\":{\"name\":\"Этап сделки в API\"},\"relationships\":{ \"deal-stage-category\":{\"data\": { \"type\": \"deal-stage-categories\",\"id\": 2}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/deal-stages')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
        "data":{
          "type":"deal-stages",
          "attributes":{
            "name":"Этап сделки в API"
          },
          "relationships":{
             "deal-stage-category": {
                "data": {
                    "type": "deal-stage-categories",
                    "id": 2
                }
             }
          }
        }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
        "data":{
          "type":"deal-stages",
          "attributes":{
            "name":"Этап сделки в API"
          },
          "relationships":{
             "deal-stage-category": {
                "data": {
                    "type": "deal-stage-categories",
                    "id": 2
                }
             }
          }
        }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/deal-stages", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deal-stages',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
        "data":{
          "type":"deal-stages",
          "attributes":{
            "name":"Этап сделки в API"
          },
          "relationships":{
             "deal-stage-category": {
                "data": {
                    "type": "deal-stage-categories",
                    "id": 2
                }
             }
          }
        }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/deal-stages"

payload = json.dumps({
        "data":{
          "type":"deal-stages",
          "attributes":{
            "name":"Этап сделки в API"
          },
          "relationships":{
             "deal-stage-category": {
                "data": {
                    "type": "deal-stage-categories",
                    "id": 2
                }
             }
          }
        }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/deal-stages'));
  request.body = json.encode({
        "data":{
          "type":"deal-stages",
          "attributes":{
            "name":"Этап сделки в API"
          },
          "relationships":{
             "deal-stage-category": {
                "data": {
                    "type": "deal-stage-categories",
                    "id": 2
                }
             }
          }
        }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type deal-stages
URL /api/v1/deal-stages
Список GET /api/v1/deal-stages
Чтение GET /api/v1/deal-stages/{id}
Создание POST /api/v1/deal-stages
Редактирование PATCH /api/v1/deal-stages/{id}
Удаление DELETE /api/v1/deal-stages/{id}

Атрибуты

Атрибуты этапа сделки

{
  "data": {
      "type":"deal-stages",
      "id":"2",
      "attributes":{
        "created-at": "2022-02-22T12:22:22.222+03:00",
        "updated-at": "2022-02-22T12:22:22.222+03:00",
        "name": "Мой этап сделки",
        "description": null,
        "duration": null,
        "kind": null,
        "color": "#e0e0e0",
        "next-if-items-done": false
      }
   }
}
Имя Тип Пример Запись Описание
name* string Мой этап сделки да Название воронки
duration integer 20000 да Длительность этапа
next-if-items-done boolean false да Переходить на следующий этап, если все задачи выполнены
description boolean true да Описание
color string #ee66aa да Цвет этапа
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список этапов сделок созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/deal-stages" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести этапы сделок, созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести этапы сделок, созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести этапы сделок, обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести этапы сделок, обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Статусы

Создание статуса сделки

curl "https://app.synergycrm.ru/api/v1/deal-statuses" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"deal-statuses",
         "attributes":{
           "name":"Статус сделки в API",
           "color":"#000000"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/deal-statuses");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"deal-statuses\",\"attributes\":{\"name\":\"Статус сделки в API\",\"color\":\"#000000\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/deal-statuses')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"deal-statuses",
         "attributes":{
           "name":"Статус сделки в API",
           "color":"#000000"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"deal-statuses",
         "attributes":{
           "name":"Статус сделки в API",
           "color":"#000000"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/deal-statuses", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deal-statuses',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"deal-statuses",
         "attributes":{
           "name":"Статус сделки в API",
           "color":"#000000"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/deal-statuses"

payload = json.dumps({
       "data":{
         "type":"deal-statuses",
         "attributes":{
           "name":"Статус сделки в API",
           "color":"#000000"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/deal-statuses'));
  request.body = json.encode({
       "data":{
         "type":"deal-statuses",
         "attributes":{
           "name":"Статус сделки в API",
           "color":"#000000"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type deal-statuses
URL /api/v1/deal-statuses
Список GET /api/v1/deal-statuses
Чтение GET /api/v1/deal-statuses/{id}
Создание POST /api/v1/deal-statuses
Редактирование PATCH /api/v1/deal-statuses/{id}
Удаление DELETE /api/v1/deal-statuses/{id}

Атрибуты

Атрибуты статуса сделки

{
  "data": {
      "type":"deal-statuses",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Мой статус сделки",
        "color": "#1f2f3f"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Мой статус сделки да Имя статуса сделки
color string #1f2f3f да Цвет статуса сделки
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список статусов сделок созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/deal-statuses" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/deal-statuses?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/deal-statuses?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/deal-statuses?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deal-statuses?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/deal-statuses?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/deal-statuses?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести статусы сделок, созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести статусы сделок, созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести статусы сделок, обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести статусы сделок, обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Заявки

Создание заявки с предустановленным источником

curl "https://app.synergycrm.ru/api/v1/orders" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"orders",
         "attributes":{
           "name":"Заявка по API",
           "archived-at":"2022-02-22"
         },
         "relationships":{
           "source":{
             "data":{
               "type":"sources",
               "id":"2"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/orders");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"orders\",\"attributes\":{\"name\":\"Заявка по API\",\"archived-at\":\"2022-02-22\"},\"relationships\":{\"source\":{\"data\":{\"type\":\"sources\",\"id\":\"2\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/orders')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{       
  "data":{         
    "type":"orders",         
    "attributes":{           
      "name":"Заявка по API",           
      "archived-at":"2022-02-22"         
      },         
      "relationships":{           
        "source":{             
          "data":{               
            "type":"sources",               
            "id":"2"             
            }           
          }         
        }       
      }     
    }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{       
  "data":{         
    "type":"orders",         
    "attributes":{           
      "name":"Заявка по API",           
      "archived-at":"2022-02-22"         
      },         
      "relationships":{           
        "source":{             
          "data":{               
            "type":"sources",               
            "id":"2"             
            }           
          }         
        }       
      }     
    }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/orders", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/orders',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{       
  "data":{         
    "type":"orders",         
    "attributes":{           
      "name":"Заявка по API",           
      "archived-at":"2022-02-22"         
      },         
      "relationships":{           
        "source":{             
          "data":{               
            "type":"sources",               
            "id":"2"             
            }           
          }         
        }       
      }     
    }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/orders"

payload = json.dumps({       
  "data":{         
    "type":"orders",         
    "attributes":{           
      "name":"Заявка по API",           
      "archived-at":"2022-02-22"         
      },         
      "relationships":{           
        "source":{             
          "data":{               
            "type":"sources",               
            "id":"2"             
            }           
          }         
        }       
      }     
    })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/orders'));
  request.body = json.encode({       
  "data":{         
    "type":"orders",         
    "attributes":{           
      "name":"Заявка по API",           
      "archived-at":"2022-02-22"         
      },         
      "relationships":{           
        "source":{             
          "data":{               
            "type":"sources",               
            "id":"2"             
            }           
          }         
        }       
      }     
    });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Создание заявки с предустановленной сделкой

curl "https://app.synergycrm.ru/api/v1/orders" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"orders",
         "attributes":{
           "name":"Заявка по API с предустановленной сделкой",
           "archived-at":"2022-02-22"
         },
         "relationships":{
           "deals": {
             "data" : [{
               "type": "deals",
               "id": 22222
             }]
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/orders");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"orders\",\"attributes\":{\"name\":\"Заявка по API с предустановленной сделкой\",\"archived-at\":\"2022-02-22\"},\"relationships\":{\"deals\": {\"data\" : [{\"type\": \"deals\",\"id\": 22222}]}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/orders')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{       
  "data":{         
    "type":"orders",         
    "attributes":{           
      "name":"Заявка по API с предустановленной сделкой",           
      "archived-at":"2022-02-22"         
      },         
      "relationships":{           
        "deals": {             
          "data" : [{               
            "type": "deals",               
            "id":22222             
            }]           
          }         
        }       
      }     
    }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{       
  "data":{         
    "type":"orders",         
    "attributes":{           
      "name":"Заявка по API с предустановленной сделкой",           
      "archived-at":"2022-02-22"         
      },         
      "relationships":{           
        "deals": {             
          "data" : [{               
            "type": "deals",               
            "id":22222             
            }]           
          }         
        }       
      }     
    }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/orders", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/orders',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{       
  "data":{         
    "type":"orders",         
    "attributes":{           
      "name":"Заявка по API с предустановленной сделкой",           
      "archived-at":"2022-02-22"         
      },         
      "relationships":{           
        "deals": {             
          "data" : [{               
            "type": "deals",               
            "id":22222             
            }]           
          }         
        }       
      }     
    }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/orders"

payload = json.dumps({       
  "data":{         
    "type":"orders",         
    "attributes":{           
      "name":"Заявка по API с предустановленной сделкой",           
      "archived-at":"2022-02-22"         
      },         
      "relationships":{           
        "deals": {             
          "data" : [{               
            "type": "deals",               
            "id":22222             
            }]           
          }         
        }       
      }     
    })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/orders'));
  request.body = json.encode({       
  "data":{         
    "type":"orders",         
    "attributes":{           
      "name":"Заявка по API с предустановленной сделкой",           
      "archived-at":"2022-02-22"         
      },         
      "relationships":{           
        "deals": {             
          "data" : [{               
            "type": "deals",               
            "id":22222             
            }]           
          }         
        }       
      }     
    });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type orders
URL /api/v1/orders
Список GET /api/v1/orders
Чтение GET /api/v1/orders/{id}
Создание POST /api/v1/orders
Редактирование PATCH /api/v1/orders/{id}
Удаление DELETE /api/v1/orders/{id}

Атрибуты

Атрибуты заявки

{
  "data": {
      "type":"orders",
      "id":"2",
      "attributes":{
        "name":"Моя заявка",
        "description":"Мое описание заявки",
        "amount":"2222.0",
        "number":22,
        "archived-at":"2022-02-22",
        "customs":{
          "custom-11":"Значение",
          "custom-43":"2022-02-22T12:02:22.222+03:00"
        },
        "created-at":"2022-02-22T12:02:22.222+03:00",
        "updated-at":"2022-02-22T12:02:22.222+03:00"
        "utm-source": null,
        "utm-medium": null,
        "utm-campaign": null,
        "utm-term": null,
        "utm-content": null,
        "utm-landing-page": null,
        "utm-city": null,
        "utm-search-query": null
      }
   }
}

Основные атрибуты

Имя Тип Пример Запись Описание
name string Моя сделка да Имя заявки
description string Описание сделки да Подробное описание заявки
loss-comment string Причина поражения да Причина поражения в свободной форме
amount decimal 123.0 да Сумма заявки
number integer 2 да Номер заявки
customs hash {"custom-1":'custom value'} да Свои поля
created-at datetime 2022-02-22T12:02:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:02:22.222+03:00 нет Дата обновления
archived-at datetime 2022-02-22T12:02:22.222+03:00 да Дата архивации
discarded-at datetime 2022-02-22T12:02:22.222+03:00 да Дата перемещения в корзину
previous-responsible-id integer 100 нет Предыдущий ответственный

UTM метки

Имя Тип Пример Запись Описание
utm-source string yandex-direct да Рекламная система
utm-medium string cpc да Тип трафика
utm-campaign string cosmetic да Название рекламной кампании
utm-term string shampoo да Ключевое слово, которое инициировало показ объявления
utm-content string some text да Информация, которая помогает различать объявления, если совпадают другие параметры
utm-landing-page string somesite.ru/path да Адрес посадочной страницы
utm-city string Москва да Город

Связи

Пример данных (перечислены не все связи)

{
  "data": {
      "type":"orders",
      "id":"2",
      "relationships":{
        "responsible":{
          "links":{
            "self":"/api/v1/orders/2/relationships/responsible",
            "related":"/api/v1/orders/2/responsible"
          }
        },
        "stage":{
          "links":{
            "self":"/api/v1/orders/2/relationships/stage",
            "related":"/api/v1/orders/2/stage"
          }
        }
      }
   }
}

Пример запроса с загруженными источниками и отвественными

curl "https://app.synergycrm.ru/api/v1/orders?include=source,responsible" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/orders?include=source,responsible");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/orders?include=source,responsible')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/orders?include=source,responsible", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/orders?include=source,responsible',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/orders?include=source,responsible"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/orders?include=source,responsible'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Ответственный responsible users
Создатель user users
Компания company companies
Контакт contact contacts
Этап stage order-stages
Источник source sources
Статус status order-statuses
Причина поражения loss-reason order-loss-reasons
Конкурент поражения loss-competitor competitors
Территория area areas
Продукты products products
Сделки deals deals
Спецификации entities-products  
Соисполнители performers users
Задачи tasks diary-tasks
Файлы documents documents
Счета invoices invoices
Договоры contracts contracts

Фильтры

Получить список заявок до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/orders" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/orders?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/orders?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/orders?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/orders?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/orders?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/orders?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
order-stage-id Вывести заявки по этапу заявки filter[order-stage-id]=2
responsible-id Вывести заявки по определенному ответственному filter[responsible-id]=2
created-at-gte Вывести заявки созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести заявки созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести заявки обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести заявки обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00
table-state-id Вывести заявки по заданному табличному фильтру filter[table-state-id]=2
q Вывести заявки по поисковому запросу filter[q]=some-query
archived Вывести заявки в архиве filter[archived]=2
discarded Вывести заявки в корзине filter[discarded]=2
actual Вывести актуальные заявки filter[actual]=2
discarded-at-null Вывести заявки не в корзине filter[discarded-at-null]=true

Причины поражения

Создание причины поражения заявки

curl "https://app.synergycrm.ru/api/v1/order-loss-reasons" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"order-loss-reasons",
         "attributes":{
           "name":"Моя причина поражения"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/order-loss-reasons");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"order-loss-reasons\",\"attributes\":{\"name\":\"Моя причина поражения\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/order-loss-reasons')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"order-loss-reasons",
         "attributes":{
           "name":"Моя причина поражения"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"order-loss-reasons",
         "attributes":{
           "name":"Моя причина поражения"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/order-loss-reasons", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/order-loss-reasons',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"order-loss-reasons",
         "attributes":{
           "name":"Моя причина поражения"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/order-loss-reasons"

payload = json.dumps({
       "data":{
         "type":"order-loss-reasons",
         "attributes":{
           "name":"Моя причина поражения"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/order-loss-reasons'));
  request.body = json.encode({
       "data":{
         "type":"order-loss-reasons",
         "attributes":{
           "name":"Моя причина поражения"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type order-loss-reasons
URL /api/v1/order-loss-reasons
Список GET /api/v1/order-loss-reasons
Чтение GET /api/v1/order-loss-reasons/{id}
Создание POST /api/v1/order-loss-reasons
Редактирование PATCH /api/v1/order-loss-reasons/{id}
Удаление DELETE /api/v1/order-loss-reasons/{id}

Атрибуты

Атрибуты причины поражения по заявке

{
  "data": {
      "type":"order-loss-reasons",
      "id":"1",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Моя причина поражения"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Моя причина поражения да Название причины поражения заявки
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список причин поражений заявок созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/order-loss-reasons" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/order-loss-reasons?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/order-loss-reasons?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/order-loss-reasons?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/order-loss-reasons?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/order-loss-reasons?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/order-loss-reasons?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести причины поражения созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести причины поражения созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести причины поражения обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести причины поражения обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Этапы

Создание нового этапа заявки

curl "https://app.synergycrm.ru/api/v1/order-stages" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"deal-stages",
         "attributes":{
           "name":"Этап в API"
         },
       "relation"
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/order-stages");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"deal-stages\",\"attributes\":{\"name\":\"Этап в API\"},\"relation\"}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/order-stages')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"deal-stages",
         "attributes":{
           "name":"Этап в API"
         },
       "relation"
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"deal-stages",
         "attributes":{
           "name":"Этап в API"
         },
       "relation"
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/order-stages", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/order-stages',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"deal-stages",
         "attributes":{
           "name":"Этап в API"
         },
       "relation"
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/order-stages"

payload = json.dumps({
       "data":{
         "type":"deal-stages",
         "attributes":{
           "name":"Этап в API"
         },
       "relation"
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/order-stages'));
  request.body = json.encode({
       "data":{
         "type":"deal-stages",
         "attributes":{
           "name":"Этап в API"
         },
       "relation"
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type order-stages
URL /api/v1/order-stages
Список GET /api/v1/order-stages
Чтение GET /api/v1/order-stages/{id}
Создание POST /api/v1/order-stages
Редактирование PATCH /api/v1/order-stages/{id}
Удаление DELETE /api/v1/order-stages/{id}

Атрибуты

Атрибуты этапа заявки

{
  "data": {
      "type":"order-stages",
      "id":"1",
      "attributes":{
        "created-at": "2022-02-22T12:22:22.222+03:00",
        "updated-at": "2022-02-22T12:22:22.222+03:00",
        "name": "Мой этап заявки",
        "description": true,
        "color": "#ee66aa",
        "duration": 20000,
        "next-if-items-done": false
      }
   }
}
Имя Тип Пример Запись Описание
name* string Мое название воронки да Название воронки
duration integer 20000 да Длительность этапа
next-if-items-done boolean false да Переходить на следующий этап, если все задачи выполнены
description boolean true да Описание
color string #ee66aa да Цвет этапа
kind string opened, won, lost, null нет Вид этапа
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список этапов заявок созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/deal-stages" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести этапы заявок, созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести этапы заявок, созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести этапы заявок, обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести этапы заявок, обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Статусы

Создание статуса заявки

curl "https://app.synergycrm.ru/api/v1/order-statuses" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"order-statuses",
         "attributes":{
           "name":"Статус заявки в API",
           "color":"#000000"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/order-statuses");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"order-statuses\",\"attributes\":{\"name\":\"Статус заявки в API\",\"color\":\"#000000\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/order-statuses')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"order-statuses",
         "attributes":{
           "name":"Статус заявки в API",
           "color":"#000000"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"order-statuses",
         "attributes":{
           "name":"Статус заявки в API",
           "color":"#000000"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/order-statuses", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/order-statuses',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"order-statuses",
         "attributes":{
           "name":"Статус заявки в API",
           "color":"#000000"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/order-statuses"

payload = json.dumps({
       "data":{
         "type":"order-statuses",
         "attributes":{
           "name":"Статус заявки в API",
           "color":"#000000"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/order-statuses'));
  request.body = json.encode({
       "data":{
         "type":"order-statuses",
         "attributes":{
           "name":"Статус заявки в API",
           "color":"#000000"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type order-statuses
URL /api/v1/order-statuses
Список GET /api/v1/order-statuses
Чтение GET /api/v1/order-statuses/{id}
Создание POST /api/v1/order-statuses
Редактирование PATCH /api/v1/order-statuses/{id}
Удаление DELETE /api/v1/order-statuses/{id}

Атрибуты

Атрибуты статуса заявки

{
  "data": {
      "type":"order-statuses",
      "id":"1",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Мой статус заявки",
        "color": "#1f2f3f"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Мой статус заявки да Имя статуса заявки
color string #1f2f3f да Цвет статуса заявки
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список статусов заявок созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/order-statuses" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/order-statuses?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/order-statuses?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/order-statuses?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/order-statuses?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/order-statuses?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/order-statuses?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести статусы заявок, созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести статусы заявок, созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести статусы заявок, обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести статусы заявок, обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

События

Создание события с предустановленным исполнителем и компанией

curl "https://app.synergycrm.ru/api/v1/diary-events" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"diary-events",
         "attributes":{
           "name":"Задача по API",
           "description":"Данная задача было создана при помощи API",
           "start-time":"2022-02-22 12:00 +0300"
         },
         "relationships":{
           "responsible": {
             "data":{
               "type":"users",
               "id":"2"
             }
           },
           "company":{
             "data":{
               "type":"companies",
               "id":"22"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/diary-events");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"diary-events\",\"attributes\":{\"name\":\"Задача по API\",\"description\":\"Данная задача было создана при помощи API\",\"start-time\":\"2022-02-22 12:00 +0300\"},\"relationships\":{\"responsible\": {\"data\":{\"type\":\"users\",\"id\":\"2\"}},\"company\":{\"data\":{\"type\":\"companies\",\"id\":\"22\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/diary-events')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"diary-events",
         "attributes":{
           "name":"Задача по API",
           "description":"Данная задача было создана при помощи API",
           "start-time":"2022-02-22 12:00 +0300"
         },
         "relationships":{
           "responsible": {
             "data":{
               "type":"users",
               "id":"2"
             }
           },
           "company":{
             "data":{
               "type":"companies",
               "id":"22"
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"diary-events",
         "attributes":{
           "name":"Задача по API",
           "description":"Данная задача было создана при помощи API",
           "start-time":"2022-02-22 12:00 +0300"
         },
         "relationships":{
           "responsible": {
             "data":{
               "type":"users",
               "id":"2"
             }
           },
           "company":{
             "data":{
               "type":"companies",
               "id":"22"
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/diary-events", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-events',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"diary-events",
         "attributes":{
           "name":"Задача по API",
           "description":"Данная задача было создана при помощи API",
           "start-time":"2022-02-22 12:00 +0300"
         },
         "relationships":{
           "responsible": {
             "data":{
               "type":"users",
               "id":"2"
             }
           },
           "company":{
             "data":{
               "type":"companies",
               "id":"22"
             }
           }
         }
       }
     }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/diary-events"

payload = json.dumps({
       "data":{
         "type":"diary-events",
         "attributes":{
           "name":"Задача по API",
           "description":"Данная задача было создана при помощи API",
           "start-time":"2022-02-22 12:00 +0300"
         },
         "relationships":{
           "responsible": {
             "data":{
               "type":"users",
               "id":"2"
             }
           },
           "company":{
             "data":{
               "type":"companies",
               "id":"22"
             }
           }
         }
       }
     })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/diary-events'));
  request.body = json.encode({
       "data":{
         "type":"diary-events",
         "attributes":{
           "name":"Задача по API",
           "description":"Данная задача было создана при помощи API",
           "start-time":"2022-02-22 12:00 +0300"
         },
         "relationships":{
           "responsible": {
             "data":{
               "type":"users",
               "id":"2"
             }
           },
           "company":{
             "data":{
               "type":"companies",
               "id":"22"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type diary-events
URL /api/v1/diary-events
Список GET /api/v1/diary-events
Чтение GET /api/v1/diary-events/{id}
Создание POST /api/v1/diary-events
Редактирование PATCH /api/v1/diary-events/{id}
Удаление DELETE /api/v1/diary-events/{id}

Атрибуты

Атрибуты события

{
  "data": {
      "type":"diary-events",
      "id":"2",
      "attributes":{
        "name":"Отправить копию договора",
        "address": "Ленинский 15",
        "description":"Отправить копию договора в ООО \"Компания\"",
        "start-time":"2022-02-22T12:02:22.222+03:00",
        "end-time":"2022-02-22T12:22:22.222+03:00",
        "color":"#fff",
        "status":"completed",
        "due-date":"2022-02-22T22:02:22.222+03:00",
        "duration":null,
        "customs":{
          "custom-1":"Важный клиент",
          "custom-943":"2022-02-22T12:02:22.222+03:00"
        },
        "created-at":"2022-02-22T12:02:22.222+03:00",
        "completed-at":"2022-02-22T22:02:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "archived-at":null
      }
   }
}
Имя Тип Пример Запись Описание
name* string Переговоры с ООО "Компания" да Название события
address string Ленинский 15 да Адрес
description string Переговоры для дальнейшей координации сотрудничества да Подробное описание события
start-time datetime 2022-02-22T12:02:22.222+03:00 да Время начала
end-time datetime 2022-02-22T12:22:22.222+03:00 да Время окончания
due-date datetime 2022-02-22T22:02:22.222+03:00 да Дедлайн
color string #fff да Цвет
status string completed, overdue, opened нет Статус
custom hash {"custom-1":'custom value'} да Свои поля
created-at datetime 2022-02-22T12:02:22.222+03:00 да Дата создания
completed-at datetime 2022-02-22T22:02:22.222+03:00 да Дата завершения
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления
archived-at datetime 2022-02-22T22:02:22.222+03:00 да Дата архивации
discarded-at datetime 2022-02-22T22:02:22.222+03:00 да Дата перемещения в корзину
completed-result string 2022-02-22T22:02:22.222+03:00 да Результат завершения
previous-responsible-id integer 100 нет Предыдущий ответственный

* Обязательные поля

Связи

Пример данных (перечислены не все связи)

{
  "data": {
      "type":"diary-events",
      "id":"2",
      "relationships":{
        "responsible":{
          "links":{
            "self":"/api/v1/diary-events/2/relationships/responsible",
            "related":"/api/v1/diary-events/2/responsible"
          }
        },
        "diary-type":{
          "links":{
            "self":"/api/v1/diary-events/2/relationships/diary-type",
            "related":"/api/v1/diary-events/2/diary-type"
          }
        }
      }
  }
}

Пример запроса с загруженными типами задачи и отвественными

curl "https://app.synergycrm.ru/api/v1/diary-events?include=diary-type,responsible" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/diary-events?include=diary-type,responsible");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/diary-events?include=diary-type,responsible')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/diary-events?include=diary-type,responsible", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-events?include=diary-type,responsible',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/diary-events?include=diary-type,responsible"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/diary-events?include=diary-type,responsible'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Ответственный responsible users
Создатель user users
Компания company companies
Контакт contact contacts
Сделка deal deals
Заявка order orders
Тип задачи diary-type diary-types
Соисполнители performers users
Постановщик initiator users
Метки labels labels
Подзадачи diaries diaries
Файлы documents documents

Фильтры

Получить список событий созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/diary-events" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/diary-events?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/diary-events?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/diary-events?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-events?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/diary-events?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/diary-events?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести события созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести события созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
completed-at-gte Вывести события завершенные после указанного времени filter[completed-at-gte]=2022.02.22 12:00
completed-at-lte Вывести события завершенные до указанного времени filter[completed-at-lte]=2022.02.22 12:00
updated-at-gte Вывести события обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести события обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00
started-gte Вывести события имеющие даты начала позднее указанного времени filter[started-gte]=2022.02.22 12:00
started-lte Вывести события имеющие даты начала раннего до указанного времени filter[started-lte]=2022.02.22 12:00
expired-gte Вывести события истекающие после указанного времени filter[expired-gte]=2022.02.22 12:00
expired-lte Вывести события истекающие до указанного времени filter[expired-lte]=2022.02.22 12:00
table-state-id Вывести события по заданному табличному фильтру filter[table-state-id]=2
q Вывести события по поисковому запросу filter[q]=some-query
archived Вывести события в архиве filter[archived]=2
discarded Вывести события в корзине filter[discarded]=2
actual Вывести актуальные события filter[actual]=2
diary-type-id Вывести события по типу задачи filter[diary-type-id]=2
discarded-at-null Вывести события не в корзине filter[discarded-at-null]=true
expired-null Вывести события без даты окончания filter[expired-null]=true
completed-at-null Вывести незавершенные события filter[completed-at-null]=true

Задачи

Создание задачи с предустановленным исполнителем и контактом

curl "https://app.synergycrm.ru/api/v1/diary-tasks" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"diary-tasks",
         "attributes":{
           "name":"Задача по API",
           "description":"Данная задача было создана при помощи API",
           "due-date":"2022-12-22 12:00 +0300",
           "start-time":"2022-02-22 12:00 +0300"
         },
         "relationships":{
           "responsible": {
             "data":{
               "type":"users",
               "id":"2"
             }
           },
           "contact":{
             "data":{
               "type":"contacts",
               "id":"22"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/diary-tasks");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"diary-tasks\",\"attributes\":{\"name\":\"Задача по API\",\"description\":\"Данная задача было создана при помощи API\",\"due-date\":\"2022-12-22 12:00 +0300\",\"start-time\":\"2022-02-22 12:00 +0300\"},\"relationships\":{\"responsible\": {\"data\":{\"type\":\"users\",\"id\":\"2\"}},\"contact\":{\"data\":{\"type\":\"contacts\",\"id\":\"22\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/diary-tasks')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{       
  "data":{         
    "type":"diary-tasks",         
    "attributes":{           
      "name":"Задача по API",           
      "description":"Данная задача было создана при помощи API",           
      "due-date":"2022-12-22 12:00 +0300",           "start-time":"2022-02-22 12:00 +0300"         
      },         
      "relationships":{           
        "responsible": {             
          "data":{               
            "type":"users",               
            "id":"2"             
            }           
          },           
          "contact":{             
            "data":{               
              "type":"contacts",               
              "id":"22"             
            }           
          }         
        }       
      }     
    }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{       
  "data":{         
    "type":"diary-tasks",         
    "attributes":{           
      "name":"Задача по API",           
      "description":"Данная задача было создана при помощи API",           
      "due-date":"2022-12-22 12:00 +0300",           "start-time":"2022-02-22 12:00 +0300"         
      },         
      "relationships":{           
        "responsible": {             
          "data":{               
            "type":"users",               
            "id":"2"             
            }           
          },           
          "contact":{             
            "data":{               
              "type":"contacts",               
              "id":"22"             
            }           
          }         
        }       
      }     
    }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/diary-tasks", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-tasks',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{       
  "data":{         
    "type":"diary-tasks",         
    "attributes":{           
      "name":"Задача по API",           
      "description":"Данная задача было создана при помощи API",           
      "due-date":"2022-12-22 12:00 +0300",           "start-time":"2022-02-22 12:00 +0300"         
      },         
      "relationships":{           
        "responsible": {             
          "data":{               
            "type":"users",               
            "id":"2"             
            }           
          },           
          "contact":{             
            "data":{               
              "type":"contacts",               
              "id":"22"             
            }           
          }         
        }       
      }     
    }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/diary-tasks"

payload = json.dumps({       
  "data":{         
    "type":"diary-tasks",         
    "attributes":{           
      "name":"Задача по API",           
      "description":"Данная задача было создана при помощи API",           
      "due-date":"2022-12-22 12:00 +0300",           "start-time":"2022-02-22 12:00 +0300"         
      },         
      "relationships":{           
        "responsible": {             
          "data":{               
            "type":"users",               
            "id":"2"             
            }           
          },           
          "contact":{             
            "data":{               
              "type":"contacts",               
              "id":"22"             
            }           
          }         
        }       
      }     
    })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/diary-tasks'));
  request.body = json.encode({       
  "data":{         
    "type":"diary-tasks",         
    "attributes":{           
      "name":"Задача по API",           
      "description":"Данная задача было создана при помощи API",           
      "due-date":"2022-12-22 12:00 +0300",           "start-time":"2022-02-22 12:00 +0300"         
      },         
      "relationships":{           
        "responsible": {             
          "data":{               
            "type":"users",               
            "id":"2"             
            }           
          },           
          "contact":{             
            "data":{               
              "type":"contacts",               
              "id":"22"             
            }           
          }         
        }       
      }     
    });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type diary-tasks
URL /api/v1/diary-tasks
Список GET /api/v1/diary-tasks
Чтение GET /api/v1/diary-tasks/{id}
Создание POST /api/v1/diary-tasks
Редактирование PATCH /api/v1/diary-tasks/{id}
Удаление DELETE /api/v1/diary-tasks/{id}

Атрибуты

Атрибуты задачи

{
  "data": {
      "type":"diary-tasks",
      "id":"2",
      "attributes":{
        "name":"Отправить копию договора",
        "address": "Ленинский 15",
        "description":"Отправить копию договора в ООО \"Компания\"",
        "start-time":"2022-02-22T12:02:22.222+03:00",
        "end-time":"2022-02-22T12:22:22.222+03:00",
        "color":"#fff",
        "status":"completed",
        "due-date":"2022-02-22T22:02:22.222+03:00",
        "duration":null,
        "progress": 0.0,
        "address-coordinates": {
          "latitude": 55.78,
          "longitude": 37.64
        },
        "customs":{
          "custom-1":"Важный клиент",
          "custom-943":"2022-02-22T12:02:22.222+03:00"
        },
        "created-at":"2022-02-22T12:02:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "completed-at":"2022-02-22T22:02:22.222+03:00",
        "archived-at":null
      }
   }
}
Имя Тип Пример Запись Описание
name* string Отправить копию договора да Имя задачи
address string Ленинский 15 да Адрес
address-coordinates json {"latitude": 55.78, "longitude": 37.64} да Координаты адреса: долгота и широта
description string Отправить копию договора в ООО "Компания" да Подробное описание задачи
start-time datetime 2022-02-22T12:02:22.222+03:00 да Время начала
end-time datetime 2022-02-22T12:22:22.222+03:00 да Время окончания
due-date datetime 2022-02-22T22:02:22.222+03:00 да Дедлайн
color string #fff да Цвет
status string completed, overdue, opened нет Статус
custom hash {"custom-1":'custom value'} да Свои поля
created-at datetime 2022-02-22T12:02:22.222+03:00 да Дата создания
completed-at datetime 2022-02-22T22:02:22.222+03:00 да Дата завершения
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления
archived-at datetime 2022-02-22T22:02:22.222+03:00 да Дата архивации
discarded-at datetime 2022-02-22T22:02:22.222+03:00 да Дата перемещения в корзину
completed-result string 2022-02-22T22:02:22.222+03:00 да Результат завершения
previous-responsible-id integer 2 нет Предыдущий ответственный
progress float 100.0 да Процент завершения задачи

* Обязательные поля

Связи

Пример данных (перечислены не все связи)

{
  "data": {
      "type":"diary-tasks",
      "id":"2",
      "relationships":{
        "responsible":{
        "links":{
            "self":"/api/v1/diary-tasks/2/relationships/responsible",
            "related":"/api/v1/diary-tasks/2/responsible"
          }
        },
        "company":{
          "links":{
            "self":"/api/v1/diary-tasks/2/relationships/company",
            "related":"/api/v1/diary-tasks/2/company"
          }
        }
      }
  }
}

Пример запроса с загруженными сделками и контактами

curl "https://app.synergycrm.ru/api/v1/diary-tasks?include=deal,contact" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/diary-tasks?include=deal,contact");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/diary-tasks?include=deal,contact')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/diary-tasks?include=deal,contact", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-tasks?include=deal,contact',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/diary-tasks?include=deal,contact"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/diary-tasks?include=deal,contact'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Ответственный responsible users
Создатель user users
Компания company companies
Контакт contact contacts
Сделка deal deals
Заявка order orders
Тип задачи diary-type diary-types
Группа задач project-task-categories project-task-categories
Приоритет diary-priority diary-priorities
Соисполнители performers users
Компании companies companies
Контакты contacts contacts
Сделки deals deals
Заявки orders orders
Постановщик initiator users
Метки labels labels
Подзадачи diaries diaries
Сегменты segments segments
Файлы documents documents

Фильтры

Получить список задач созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/diary-tasks" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/diary-tasks?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/diary-tasks?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/diary-tasks?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-tasks?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/diary-tasks?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/diary-tasks?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
responsible-id Вывести задачи по определенному ответственному filter[responsible-id]=2
user-id Вывести задачи по определенному создателю filter[user-id]=2
initiator-id Вывести задачи по определенному постановщику filter[initiator-id]=2
diary-priority-id Вывести задачи по определенному приоритету filter[diary-priority-id]=2
created-at-gte Вывести задачи созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести задачи созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
completed-at-gte Вывести задачи завершенные после указанного времени filter[completed-at-gte]=2022.02.22 12:00
completed-at-lte Вывести задачи завершенные до указанного времени filter[completed-at-lte]=2022.02.22 12:00
updated-at-gte Вывести задачи обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести задачи обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00
due-date-gte Вывести задачи с дедлайном после указанного времени filter[due-date-gte]=2022.02.22 12:00
due-date-lte Вывести задачи с дедлайном до указанного времени filter[due-date-lte]=2022.02.22 12:00
started-gte Вывести задачи имеющие даты начала позднее указанного времени filter[started-gte]=2022.02.22 12:00
started-lte Вывести задачи имеющие даты начала раннего до указанного времени filter[started-lte]=2022.02.22 12:00
expired-gte Вывести задачи истекающие после указанного времени filter[expired-gte]=2022.02.22 12:00
expired-lte Вывести задачи истекающие до указанного времени filter[expired-lte]=2022.02.22 12:00
table-state-id Вывести задачи по заданному табличному фильтру filter[table-state-id]=2
q Вывести задачи по поисковому запросу filter[q]=some-query
archived Вывести задачи в архиве filter[archived]=2
discarded Вывести задачи в корзине filter[discarded]=2
actual Вывести актуальные задачи filter[actual]=2
diary-type-id Вывести задачи по типу задачи filter[diary-type-id]=2
discarded-at-null Вывести задачи не в корзине filter[discarded-at-null]=true
completed-at-null Вывести незавершенные задачи filter[completed-at-null]=true
due-date-null Вывести задачи без дедлайна filter[due-date-null]=true

Типы задач

Получение списка типов задач

curl "https://app.synergycrm.ru/api/v1/diary-types" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/diary-types");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/diary-types')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/diary-types", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-types',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/diary-types"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/diary-types'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
curl "https://app.synergycrm.ru/api/v1/diary-types" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"diary-types",
         "attributes":{
           "name": "Тип задачи",
           "color": "#b43f18",
           "regulations": "Текст регламента"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/diary-types");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"diary-types\",\"attributes\":{\"name\": \"Тип задачи\",\"color\": \"#b43f18\",\"regulations\": \"Текст регламента\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/diary-types')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"diary-types",
         "attributes":{
           "name": "Тип задачи",
           "color": "#b43f18",
           "regulations": "Текст регламента"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"diary-types",
         "attributes":{
           "name": "Тип задачи",
           "color": "#b43f18",
           "regulations": "Текст регламента"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/diary-types", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-types',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"diary-types",
         "attributes":{
           "name": "Тип задачи",
           "color": "#b43f18",
           "regulations": "Текст регламента"
         }
       }
     }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/diary-types"

payload = json.dumps({
       "data":{
         "type":"diary-types",
         "attributes":{
           "name": "Тип задачи",
           "color": "#b43f18",
           "regulations": "Текст регламента"
         }
       }
     })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/diary-types'));
  request.body = json.encode({
       "data":{
         "type":"diary-types",
         "attributes":{
           "name": "Тип задачи",
           "color": "#b43f18",
           "regulations": "Текст регламента"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type diary-types
URL /api/v1/diary-types
Список GET /api/v1/diary-types
Чтение GET /api/v1/diary-types/{id}
Создание POST /api/v1/diary-types
Редактирование PATCH /api/v1/diary-types/{id}
Удаление DELETE /api/v1/diary-types/{id}

Атрибуты

Атрибуты типа задачи

{
    "data": [
        {
            "id": "2",
            "type": "diary-types",
            "links": {
                "self": "https://synergycrm.ru/api/v1/diary-types/2"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "Тип задачи",
                "is-call": null,
                "regulations": "Текст регламента",
                "color": "#b43f18"
            },
            "relationships": {
                "tasks": {
                    "links": {
                        "self": "https://synergycrm.ru/api/v1/diary-types/2/relationships/tasks",
                        "related": "https://synergycrm.ru/api/v1/diary-types/2/tasks"
                    }
                }
            }
        }
    ]
}
Имя Тип Пример Запись Описание
name* string Пример типа задачи да Имя типа задачи
color string #b43f18 да Цвет
regulations string Текст регламента да Текст регламента
created-at datetime 2022-02-22T12:02:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:02:22.222+03:00 нет Дата обновления
cached-at datetime 2022-02-22T12:02:22.222+03:00 нет Дата кеширования

* Обязательные поля

Приоритеты

Создание приоритета задачи

curl "https://app.synergycrm.ru/api/v1/diary-priorities" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"diary-priorities",
         "attributes":{
           "name":"Приоритет задачи в API",
           "color":"#000000"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/diary-priorities");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"diary-priorities\",\"attributes\":{\"name\":\"Приоритет задачи в API\",\"color\":\"#000000\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/diary-priorities')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"diary-priorities",
         "attributes":{
           "name":"Приоритет задачи в API",
           "color":"#000000"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"diary-priorities",
         "attributes":{
           "name":"Приоритет задачи в API",
           "color":"#000000"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/diary-priorities", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-priorities',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"diary-priorities",
         "attributes":{
           "name":"Приоритет задачи в API",
           "color":"#000000"
         }
       }
     }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/diary-priorities"

payload = json.dumps({
       "data":{
         "type":"diary-priorities",
         "attributes":{
           "name":"Приоритет задачи в API",
           "color":"#000000"
         }
       }
     })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/diary-priorities'));
  request.body = json.encode({
       "data":{
         "type":"diary-priorities",
         "attributes":{
           "name":"Приоритет задачи в API",
           "color":"#000000"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type diary-priorities
URL /api/v1/diary-priorities
Список GET /api/v1/diary-priorities
Чтение GET /api/v1/diary-priorities/{id}
Создание POST /api/v1/diary-priorities
Редактирование PATCH /api/v1/diary-priorities/{id}
Удаление DELETE /api/v1/diary-priorities/{id}

Атрибуты

Атрибуты приоритета задачи

{
  "data": {
      "type":"diary-priorities",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:02:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Мой приоритет задачи",
        "color": "#1f2f3f"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Мой приоритет задачи да Название приоритета
color string #1f2f3f да Цвет приоритета
created-at datetime 2022-02-22T12:02:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Вложенные объекты задачи

Добавление подзадачи в задачу

curl "https://app.synergycrm.ru/api/v1/diary-entities" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"diary-entities",
          "relationships":{
            "diary":{
              "data":{
                "type":"diaries",
                "id": 2
              }
            },
            "entity":{
              "data":{
                "type":"deals",
                "id": 22
              }
            }
          }
        }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/diary-entities");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"diary-entities\",\"relationships\":{\"diary\":{\"data\":{\"type\":\"diaries\",\"id\": 2}},\"entity\":{\"data\":{\"type\":\"deals\",\"id\": 22}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/diary-entities')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"diary-entities",
          "relationships":{
            "diary":{
              "data":{
                "type":"diaries",
                "id": 2
              }
            },
            "entity":{
              "data":{
                "type":"deals",
                "id": 22
              }
            }
          }
        }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"diary-entities",
          "relationships":{
            "diary":{
              "data":{
                "type":"diaries",
                "id": 2
              }
            },
            "entity":{
              "data":{
                "type":"deals",
                "id": 22
              }
            }
          }
        }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/diary-entities", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-entities',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"diary-entities",
          "relationships":{
            "diary":{
              "data":{
                "type":"diaries",
                "id": 2
              }
            },
            "entity":{
              "data":{
                "type":"deals",
                "id": 22
              }
            }
          }
        }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/diary-entities"

payload = json.dumps({
       "data":{
         "type":"diary-entities",
          "relationships":{
            "diary":{
              "data":{
                "type":"diaries",
                "id": 2
              }
            },
            "entity":{
              "data":{
                "type":"deals",
                "id": 22
              }
            }
          }
        }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/diary-entities'));
  request.body = json.encode({
       "data":{
         "type":"diary-entities",
          "relationships":{
            "diary":{
              "data":{
                "type":"diaries",
                "id": 2
              }
            },
            "entity":{
              "data":{
                "type":"deals",
                "id": 22
              }
            }
          }
        }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type diary-entities
URL /api/v1/diary-entities
Список GET /api/v1/diary-entities
Чтение GET /api/v1/diary-entities/{id}
Создание POST /api/v1/diary-entities
Редактирование PATCH /api/v1/diary-entities/{id}
Удаление DELETE /api/v1/diary-entities/{id}

Связи

Пример данных

{
  "data": {
      "type":"products",
      "id":"2",
      "relationships":{
        "diary":{
          "links":{
            "self":"/api/v1/diary-entities/2/relationships/diary",
            "related":"/api/v1/diary-entities/2/diary"
          }
        },
        "entity":{
          "links":{
            "self":"/api/v1/diary-entities/2/relationships/entity",
            "related":"/api/v1/diary-entities/2/entity"
          }
        }
      }
   }
}

Пример запроса с загруженным объектом

curl "https://app.synergycrm.ru/api/v1/diary-entities??filter[entity-id]=2&filter[entity-type]=deals&include=entity" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/diary-entities??filter[entity-id]=2&filter[entity-type]=deals&include=entity");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/diary-entities??filter[entity-id]=2&filter[entity-type]=deals&include=entity')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/diary-entities??filter[entity-id]=2&filter[entity-type]=deals&include=entity", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-entities??filter[entity-id]=2&filter[entity-type]=deals&include=entity',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/diary-entities??filter[entity-id]=2&filter[entity-type]=deals&include=entity"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/diary-entities??filter[entity-id]=2&filter[entity-type]=deals&include=entity'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Задача diary diaries
Объект entity deals, orders, contacts, companies, estate-properties, contact-groups, contracts, document-template-renders, products, diaries, invoices, checkups

Атрибуты

Атрибуты вложенных в задачу объектов

{
  "data": {
      "type":"diary-entities",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
      }
   }
}
Имя Тип Пример Запись Описание
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

Фильтры

Получить список вложенных в задачу объектов по определённой сделке

curl -G "https://app.synergycrm.ru/api/v1/diary-entities/?filter[entity-id]=2&filter[entity-type]=deals" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/diary-entities/?filter[entity-id]=2&filter[entity-type]=deals");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/diary-entities/?filter[entity-id]=2&filter[entity-type]=deals')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/diary-entities/?filter[entity-id]=2&filter[entity-type]=deals", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-entities/?filter[entity-id]=2&filter[entity-type]=deals',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/diary-entities/?filter[entity-id]=2&filter[entity-type]=deals"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/diary-entities/?filter[entity-id]=2&filter[entity-type]=deals'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
entity-id Вывести объекты по определенному entity-id filter[entity-id]=2
entity-type Вывести объекты по определенному entity-type. Допустимые значения: contacts, deals, orders, companies filter[entity-type]=contacts
created-at-gte Вывести объекты созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести объекты созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести объекты обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести объекты обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Записи

Создание записи

curl "https://app.synergycrm.ru/api/v1/entries" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"entries",
         "attributes":{
           "start-time":"2022-02-22 22:22 +0300",
           "duration":"02:00"
         },
         "relationships":{
            "calendar": {
                "data": {
                  "type": "calendars",
                  "id": 2
                }
            },
            "resource": {
                "data": {
                  "type": "calendar-resources",
                  "id": 2
                }
            },
            "responsible": {
                "data": {
                  "type": "users",
                  "id": 2
                }
            }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/entries");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"entries\",\"attributes\":{\"start-time\":\"2022-02-22 22:22 +0300\",\"duration\":\"02:00\"},\"relationships\":{\"calendar\": {\"data\": {\"type\": \"calendars\",\"id\": 2}},\"resource\": {\"data\": {\"type\": \"calendar-resources\",\"id\": 2}},\"responsible\": {\"data\": {\"type\": \"users\",\"id\": 2}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/entries')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"entries",
         "attributes":{
           "start-time":"2022-02-22 22:22 +0300",
           "duration":"02:00"
         },
         "relationships":{
            "calendar": {
                "data": {
                  "type": "calendars",
                  "id": 2
                }
            },
            "resource": {
                "data": {
                  "type": "calendar-resources",
                  "id": 2
                }
            },
            "responsible": {
                "data": {
                  "type": "users",
                  "id": 2
                }
            }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"entries",
         "attributes":{
           "start-time":"2022-02-22 22:22 +0300",
           "duration":"02:00"
         },
         "relationships":{
            "calendar": {
                "data": {
                  "type": "calendars",
                  "id": 2
                }
            },
            "resource": {
                "data": {
                  "type": "calendar-resources",
                  "id": 2
                }
            },
            "responsible": {
                "data": {
                  "type": "users",
                  "id": 2
                }
            }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/entries", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/entries',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"entries",
         "attributes":{
           "start-time":"2022-02-22 22:22 +0300",
           "duration":"02:00"
         },
         "relationships":{
            "calendar": {
                "data": {
                  "type": "calendars",
                  "id": 2
                }
            },
            "resource": {
                "data": {
                  "type": "calendar-resources",
                  "id": 2
                }
            },
            "responsible": {
                "data": {
                  "type": "users",
                  "id": 2
                }
            }
         }
       }
     }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/entries"

payload = json.dumps({
       "data":{
         "type":"entries",
         "attributes":{
           "start-time":"2022-02-22 22:22 +0300",
           "duration":"02:00"
         },
         "relationships":{
            "calendar": {
                "data": {
                  "type": "calendars",
                  "id": 2
                }
            },
            "resource": {
                "data": {
                  "type": "calendar-resources",
                  "id": 2
                }
            },
            "responsible": {
                "data": {
                  "type": "users",
                  "id": 2
                }
            }
         }
       }
     })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/entries'));
  request.body = json.encode({
       "data":{
         "type":"entries",
         "attributes":{
           "start-time":"2022-02-22 22:22 +0300",
           "duration":"02:00"
         },
         "relationships":{
            "calendar": {
                "data": {
                  "type": "calendars",
                  "id": 2
                }
            },
            "resource": {
                "data": {
                  "type": "calendar-resources",
                  "id": 2
                }
            },
            "responsible": {
                "data": {
                  "type": "users",
                  "id": 2
                }
            }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type entries
URL /api/v1/entries
Список GET /api/v1/entries
Чтение GET /api/v1/entries/{id}
Создание POST /api/v1/entries
Редактирование PATCH /api/v1/entries/{id}
Удаление DELETE /api/v1/entries/{id}

Атрибуты

Атрибуты записи

{
  "data": {
      "type":"entries",
      "id": 2,
      "attributes":{
        "start-time":"2022-02-22 22:22 +0300",
        "duration":"00:30",
        "created-at":"2022-02-22T12:02:22.222+03:00",
        "updated-at":"2022-02-22T12:02:22.222+03:00"
      }
   }
}
Имя Тип Пример Запись Описание
name string Наименование да Название
start-time* datetime 2022-02-22 22:22 +0300 да Время начала
duration* string 00:30 да Длительность
comment string Примечание да Примечание
created-at datetime 2022-02-22T12:02:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:02:22.222+03:00 нет Дата обновления

* Обязательные поля

Связи

Пример данных (перечислены не все связи)

{
  "data": {
    "type":"entries",
    "id":"2",
    "relationships":{
      "calendar": {
        "data": {
          "type": "calendars",
          "id": 2
        }
      },
      "resource": {
        "data": {
          "type": "calendar-resources",
          "id": 200
        }
      },
      "responsible": {
        "data": {
          "type": "users",
          "id": 22
        }
      }
    }
  }
}
Название Связь JSON API type
Создатель creator users
Ответственный responsible users
Ресурс resource calendar-resources
Календарь calendar calendars
Статус status entry-statuses
Вид услуги service service-kinds
Источник source sources
Компании companies companies
Контакты contacts contacts
Сделки deals deals
Заявки orders orders
Осмотры checkups checkups
Вложенные продукты entities-products entity-products
Документы document-template-renders document-template-renders

Фильтры

Получить список осмотров по запросу

curl -G "https://app.synergycrm.ru/api/v1/entries/?filter[q]=Осмотр" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/entries/?filter[q]=Осмотр");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/entries/?filter[q]=Осмотр')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/entries/?filter[q]=Осмотр", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/entries/?filter[q]=Осмотр',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/entries/?filter[q]=Осмотр"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/entries/?filter[q]=Осмотр'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести записи созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести записи созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести записи обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести записи обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00
discarded-at-gte Вывести записи в корзине после указанного времени filter[discarded-at-gte]=2022.02.22 12:00
discarded-at-lte Вывести записи в корзине до указанного времени filter[discarded-at-lte]=2022.02.22 12:00
responsible-id Вывести записи по определенному ответственному filter[responsible-id]=2
user-id Вывести записи по определенному создателю filter[user-id]=2
archived Вывести записи в архиве filter[archived]=2
discarded Вывести записи в корзине filter[discarded]=2
actual Вывести актуальные записи filter[actual]=2
discarded-at-null Вывести записи не в корзине filter[discarded-at-null]=true
table-state-id Вывести записи по заданному табличному фильтру filter[table-state-id]=2
q Вывести записи по поисковому запросу filter[q]=some-query

Календари

Создание календаря

curl "https://app.synergycrm.ru/api/v1/calendars" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"calendars",
         "attributes":{
           "name":"Мой календарь"
         }
       },
       "relationships":{
           "calendar-category":{
             "data":{
               "type":"calendar-categories",
               "id":2
             }
           }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/calendars");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"calendars\",\"attributes\":{\"name\":\"Мой календарь\"}},\"relationships\":{\"calendar-category\":{\"data\":{\"type\":\"calendar-categories\",\"id\":2}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/calendars')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"calendars",
         "attributes":{
           "name":"Мой календарь"
         }
       },
       "relationships":{
           "calendar-category":{
             "data":{
               "type":"calendar-categories",
               "id":2
             }
           }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"calendars",
         "attributes":{
           "name":"Мой календарь"
         }
       },
       "relationships":{
           "calendar-category":{
             "data":{
               "type":"calendar-categories",
               "id":2
             }
           }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/calendars", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendars',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"calendars",
         "attributes":{
           "name":"Мой календарь"
         }
       },
       "relationships":{
           "calendar-category":{
             "data":{
               "type":"calendar-categories",
               "id":2
             }
           }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/calendars"

payload = json.dumps({
       "data":{
         "type":"calendars",
         "attributes":{
           "name":"Мой календарь"
         }
       },
       "relationships":{
           "calendar-category":{
             "data":{
               "type":"calendar-categories",
               "id":2
             }
           }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/calendars'));
  request.body = json.encode({
       "data":{
         "type":"calendars",
         "attributes":{
           "name":"Мой календарь"
         }
       },
       "relationships":{
           "calendar-category":{
             "data":{
               "type":"calendar-categories",
               "id":2
             }
           }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Атрибуты

Атрибуты календаря

{
  "data": {
    "id": "2",
    "type": "calendars",
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/calendars/2"
    },
    "attributes": {
      "created-at": "2022-02-22T12:02:22.222+03:00",
      "updated-at": "2022-02-22T12:02:22.222+03:00",
      "name": "Мой календарь",
      "start-time":"2022-02-22 09:00 +0300",
      "end-time":"2022-02-22 18:00 +0300",
      "address": "Кремлевская, 2, корп. 2",
      "resource-alias-plural": "Кабинеты",
      "resource-alias-singular": "Кабинет",
      "entry-background": "service",
      "entry-step": 15,
      "phone": "+79876543211",
      "view-type": "timelineMonth",
      "notify_schedule_change": true
    }
  }
}
Имя Тип Пример Запись Описание
name* string Мой календарь да Название
start-time datetime 2022-02-22 09:00 +0300 да Время начала
end-time datetime 2022-02-22 18:00 +0300 да Время окончания
address string Кремлевская, 2, корп. 2 да Адрес
resource-alias-plural string Кабинеты да Имя ресурса, множ. число
resource-alias-singular string Кабинет да Имя ресурса, ед. число
entry-background string service, status, responsible да Цвет фона карточки записи (статуса, услуги или сотрудника)
entry-step integer 15 да Шаг записи (минут)
phone string +79876543211 да Телефон
view-type string timelineMonth да Вид календаря (timeGrid - вертикальный, timelineDay - горизонтальный на день, timelineMonth - горизонтальный на месяц)
notify-schedule-change boolean true да Уведомлять об изменении режима работы сотрудника в календаре

* Обязательные поля

Фильтры

Получить список календарей созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/calendars" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/calendars?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/calendars?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/calendars?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendars?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/calendars?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/calendars?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести календари созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести календари созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести календари обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести календари обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Категории календарей

Создание категории календарей

curl "https://app.synergycrm.ru/api/v1/calendar-categories" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"calendar-categories",
         "attributes":{
           "name":"Название категории календарей"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/calendar-categories");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"calendar-categories\",\"attributes\":{\"name\":\"Название категории календарей\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/calendar-categories')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"calendar-categories",
         "attributes":{
           "name":"Название категории календарей"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"calendar-categories",
         "attributes":{
           "name":"Название категории календарей"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/calendar-categories", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendar-categories',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"calendar-categories",
         "attributes":{
           "name":"Название категории календарей"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/calendar-categories"

payload = json.dumps({
       "data":{
         "type":"calendar-categories",
         "attributes":{
           "name":"Название категории календарей"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/calendar-categories'));
  request.body = json.encode({
       "data":{
         "type":"calendar-categories",
         "attributes":{
           "name":"Название категории календарей"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Атрибуты

Атрибуты категории календарей

{
  "data": {
    "id": "2",
    "type": "calendar-categories",
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/calendar-categories/2"
    },
    "attributes": {
      "created-at": "2022-02-22T12:02:22.222+03:00",
      "updated-at": "2022-02-22T12:02:22.222+03:00",
      "name": "Название категории календарей",
      "position": 2
    }
  }
}
Имя Тип Пример Запись Описание
name* string Название категории календарей да Название
position integer 2 да Позиция в списке

* Обязательные поля

Фильтры

Получить список категорий календарей созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/calendar-categories" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/calendar-categories?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/calendar-categories?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/calendar-categories?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendar-categories?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/calendar-categories?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/calendar-categories?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести категории календарей, созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести категории календарей, созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести категории календарей, обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести категории календарей, обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Ресурс календаря

Создание ресурса в календаре

curl "https://app.synergycrm.ru/api/v1/calendar-resources" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"calendar-resources",
         "attributes":{
           "name":"Кабинет 1",
           "short-name": "К1"
         },
         "relationships":{
           "calendar-resource-category":{
             "data":{
               "type":"calendar-resource-categories",
               "id":2
             }
           },
           "calendar":{
             "data":{
               "type":"calendars",
               "id":2
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/calendar-resources");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"calendar-resources\",\"attributes\":{\"name\":\"Кабинет 1\",\"short-name\": \"К1\"},\"relationships\":{\"calendar-resource-category\":{\"data\":{\"type\":\"calendar-resource-categories\",\"id\":2}},\"calendar\":{\"data\":{\"type\":\"calendars\",\"id\":2}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/calendar-resources')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"calendar-resources",
         "attributes":{
           "name":"Кабинет 1",
           "short-name": "К1"
         },
         "relationships":{
           "calendar-resource-category":{
             "data":{
               "type":"calendar-resource-categories",
               "id":2
             }
           },
           "calendar":{
             "data":{
               "type":"calendars",
               "id":2
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"calendar-resources",
         "attributes":{
           "name":"Кабинет 1",
           "short-name": "К1"
         },
         "relationships":{
           "calendar-resource-category":{
             "data":{
               "type":"calendar-resource-categories",
               "id":2
             }
           },
           "calendar":{
             "data":{
               "type":"calendars",
               "id":2
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/calendar-resources", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendar-resources',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"calendar-resources",
         "attributes":{
           "name":"Кабинет 1",
           "short-name": "К1"
         },
         "relationships":{
           "calendar-resource-category":{
             "data":{
               "type":"calendar-resource-categories",
               "id":2
             }
           },
           "calendar":{
             "data":{
               "type":"calendars",
               "id":2
             }
           }
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/calendar-resources"

payload = json.dumps({
       "data":{
         "type":"calendar-resources",
         "attributes":{
           "name":"Кабинет 1",
           "short-name": "К1"
         },
         "relationships":{
           "calendar-resource-category":{
             "data":{
               "type":"calendar-resource-categories",
               "id":2
             }
           },
           "calendar":{
             "data":{
               "type":"calendars",
               "id":2
             }
           }
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/calendar-resources'));
  request.body = json.encode({
       "data":{
         "type":"calendar-resources",
         "attributes":{
           "name":"Кабинет 1",
           "short-name": "К1"
         },
         "relationships":{
           "calendar-resource-category":{
             "data":{
               "type":"calendar-resource-categories",
               "id":2
             }
           },
           "calendar":{
             "data":{
               "type":"calendars",
               "id":2
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Атрибуты

Атрибуты ресурса

{
  "data": {
    "id": "2",
    "type": "calendar-resources",
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/calendar-resources/2"
    },
    "attributes": {
      "created-at": "2022-02-22T12:02:22.222+03:00",
      "updated-at": "2022-02-22T12:02:22.222+03:00",
      "name": "Кабинет 1",
      "short-name": "К1",
      "color": "#c6c6c6",
      "visit-duration": "00:30",
      "position": 2
    }
  }
}
Имя Тип Пример Запись Описание
name* string Кабинет 1 да Название
short-name* string К1 да Сокращенное название
color string #c6c6c6 да Цвет
visit-duration string 00:30 да Длительность визита
position integer 2 да Позиция в списке

* Обязательные поля

Фильтры

Получить список категорий ресурсов созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/calendar-resources" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/calendar-resources?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/calendar-resources?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/calendar-resources?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendar-resources?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/calendar-resources?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/calendar-resources?filter[created-at-gte]=2022.02.22 12:00'));
  request.body = json.encode();
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести ресурсы, созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести ресурсы, созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести ресурсы, обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести ресурсы, обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Категории ресурсов в календаре

Создание категории ресурсов для календаря

curl "https://app.synergycrm.ru/api/v1/calendar-resource-categories" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"calendar-resource-categories",
         "attributes":{
           "name":"Категория ресурсов в календаре"
         },
         "relationships":{
           "calendar":{
             "data":{
               "type":"calendars",
               "id":2
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/calendar-resource-categories");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"calendar-resource-categories\",\"attributes\":{\"name\":\"Категория ресурсов в календаре\"},\"relationships\":{\"calendar\":{\"data\":{\"type\":\"calendars\",\"id\":2}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/calendar-resource-categories')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"calendar-resource-categories",
         "attributes":{
           "name":"Категория ресурсов в календаре"
         },
         "relationships":{
           "calendar":{
             "data":{
               "type":"calendars",
               "id":2
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"calendar-resource-categories",
         "attributes":{
           "name":"Категория ресурсов в календаре"
         },
         "relationships":{
           "calendar":{
             "data":{
               "type":"calendars",
               "id":2
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/calendar-resource-categories", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendar-resource-categories',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"calendar-resource-categories",
         "attributes":{
           "name":"Категория ресурсов в календаре"
         },
         "relationships":{
           "calendar":{
             "data":{
               "type":"calendars",
               "id":2
             }
           }
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/calendar-resource-categories"

payload = json.dumps({
       "data":{
         "type":"calendar-resource-categories",
         "attributes":{
           "name":"Категория ресурсов в календаре"
         },
         "relationships":{
           "calendar":{
             "data":{
               "type":"calendars",
               "id":2
             }
           }
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/calendar-resource-categories'));
  request.body = json.encode({
       "data":{
         "type":"calendar-resource-categories",
         "attributes":{
           "name":"Категория ресурсов в календаре"
         },
         "relationships":{
           "calendar":{
             "data":{
               "type":"calendars",
               "id":2
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Атрибуты

Атрибуты категории ресурсов в календаре

{
  "data": {
    "id": "2",
    "type": "calendar-resource-categories",
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/calendar-resource-categories/2"
    },
    "attributes": {
      "created-at": "2022-02-22T12:02:22.222+03:00",
      "updated-at": "2022-02-22T12:02:22.222+03:00",
      "name": "Категория ресурсов в календаре",
      "position": 2
    }
  }
}
Имя Тип Пример Запись Описание
name* string Категория ресурсов да Название
position integer 2 да Позиция в списке

* Обязательные поля

Фильтры

Получить список категорий ресурсов созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/calendar-resource-categories" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/calendar-resource-categories?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/calendar-resource-categories?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/calendar-resource-categories?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendar-resource-categories?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/calendar-resource-categories?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-resource-categories'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести категории ресурсов, созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести категории ресурсов, созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести категории ресурсов, обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести категории ресурсов, обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Связи

Загрузка категорий ресурсов по календарю (id = 2)

curl "https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-resource-categories" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-resource-categories");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-resource-categories')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-resource-categories", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-resource-categories',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-resource-categories"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-resource-categories'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Название Связь JSON API type
Календарь calendar calendars

Режим работы сотрудника в календаре

Создание режима работы сотрудника в календаре

curl "https://app.synergycrm.ru/api/v1/calendar-schedules" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"calendar-schedules",
         "attributes":{
           "start-time":"2022-02-22 09:00 +0300",
           "end-time":"2022-02-22 18:00 +0300"
         },
         "relationships":{
           "calendar":{
             "data":{
               "type":"calendars",
               "id":2
             }
           },
           "user":{
             "data":{
               "type":"users",
               "id":2
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/calendar-schedules");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"calendar-schedules\",\"attributes\":{\"start-time\":\"2022-02-22 09:00 +0300\",\"end-time\":\"2022-02-22 18:00 +0300\"},\"relationships\":{\"calendar\":{\"data\":{\"type\":\"calendars\",\"id\":2}},\"user\":{\"data\":{\"type\":\"users\",\"id\":2}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/calendar-schedules')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"calendar-schedules",
         "attributes":{
           "start-time":"2022-02-22 09:00 +0300",
           "end-time":"2022-02-22 18:00 +0300"
         },
         "relationships":{
           "calendar":{
             "data":{
               "type":"calendars",
               "id":2
             }
           },
           "user":{
             "data":{
               "type":"users",
               "id":2
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"calendar-schedules",
         "attributes":{
           "start-time":"2022-02-22 09:00 +0300",
           "end-time":"2022-02-22 18:00 +0300"
         },
         "relationships":{
           "calendar":{
             "data":{
               "type":"calendars",
               "id":2
             }
           },
           "user":{
             "data":{
               "type":"users",
               "id":2
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/calendar-schedules", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendar-schedules',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"calendar-schedules",
         "attributes":{
           "start-time":"2022-02-22 09:00 +0300",
           "end-time":"2022-02-22 18:00 +0300"
         },
         "relationships":{
           "calendar":{
             "data":{
               "type":"calendars",
               "id":2
             }
           },
           "user":{
             "data":{
               "type":"users",
               "id":2
             }
           }
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/calendar-schedules"

payload = json.dumps({
       "data":{
         "type":"calendar-schedules",
         "attributes":{
           "start-time":"2022-02-22 09:00 +0300",
           "end-time":"2022-02-22 18:00 +0300"
         },
         "relationships":{
           "calendar":{
             "data":{
               "type":"calendars",
               "id":2
             }
           },
           "user":{
             "data":{
               "type":"users",
               "id":2
             }
           }
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/calendar-schedules'));
  request.body = json.encode({
       "data":{
         "type":"calendar-schedules",
         "attributes":{
           "start-time":"2022-02-22 09:00 +0300",
           "end-time":"2022-02-22 18:00 +0300"
         },
         "relationships":{
           "calendar":{
             "data":{
               "type":"calendars",
               "id":2
             }
           },
           "user":{
             "data":{
               "type":"users",
               "id":2
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Атрибуты

Атрибуты рабочего времени

{
  "data": {
    "id": "2",
    "type": "calendar-schedules",
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/calendar-schedules/37"
    },
    "attributes": {
      "created-at": "2022-02-22T12:02:22.222+03:00",
      "updated-at": "2022-02-22T12:02:22.222+03:00",
      "start-time":"2022-02-22 09:00 +0300",
      "end-time":"2022-02-22 18:00 +0300"
    }
  }
}
Имя Тип Пример Запись Описание
start-time* datetime 2022-02-22 09:00 +0300 да Время начала работы
end-time* datetime 2022-02-22 18:00 +0300 да Время окончания работы

* Обязательные поля

Фильтры

Получить список режимов работы, созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/calendar-schedules" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/calendar-schedules?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/calendar-schedules?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/calendar-schedules?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendar-schedules?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/calendar-schedules?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/calendar-schedules?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести режимы работы, созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести режимы работы, созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести режимы работы, обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести режимы работы, обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Связи

Загрузка режима работы сотрудника по календарю (id = 2)

curl "https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-schedules" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-schedules");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-schedules')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-schedules", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-schedules',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-schedules"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-schedules'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Название Связь JSON API type
Календарь calendar calendars
Сотрудник user users
Ресурс resource calendar-resources

* Обязательные связи

Виды услуг

Создание вида услуг

curl "https://app.synergycrm.ru/api/v1/service-kinds" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"service-kinds",
         "attributes":{
           "name":"Консультация"
         },
         "relationships":{
           "service-kind-category":{
             "data":{
               "type":"service-kind-categories",
               "id":2
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/service-kinds");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"service-kinds\",\"attributes\":{\"name\":\"Консультация\"},\"relationships\":{\"service-kind-category\":{\"data\":{\"type\":\"service-kind-categories\",\"id\":2}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/service-kinds')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"service-kinds",
         "attributes":{
           "name":"Консультация"
         },
         "relationships":{
           "service-kind-category":{
             "data":{
               "type":"service-kind-categories",
               "id":2
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"service-kinds",
         "attributes":{
           "name":"Консультация"
         },
         "relationships":{
           "service-kind-category":{
             "data":{
               "type":"service-kind-categories",
               "id":2
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/service-kinds", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/service-kinds',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"service-kinds",
         "attributes":{
           "name":"Консультация"
         },
         "relationships":{
           "service-kind-category":{
             "data":{
               "type":"service-kind-categories",
               "id":2
             }
           }
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/service-kinds"

payload = json.dumps({
       "data":{
         "type":"service-kinds",
         "attributes":{
           "name":"Консультация"
         },
         "relationships":{
           "service-kind-category":{
             "data":{
               "type":"service-kind-categories",
               "id":2
             }
           }
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/service-kinds'));
  request.body = json.encode({
       "data":{
         "type":"service-kinds",
         "attributes":{
           "name":"Консультация"
         },
         "relationships":{
           "service-kind-category":{
             "data":{
               "type":"service-kind-categories",
               "id":2
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Атрибуты

Атрибуты видов услуг

{
  "data": {
    "id": "2",
    "type": "service-kinds",
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/service-kinds/37"
    },
    "attributes": {
      "created-at": "2022-02-22T12:02:22.222+03:00",
      "updated-at": "2022-02-22T12:02:22.222+03:00",
      "name":"Консультация",
      "color": "#c6c6c6",
      "limit-participants": 2,
      "position": 2
    }
  }
}
Имя Тип Пример Запись Описание
name* string Консультация да Название
color string #c6c6c6 да Цвет
limit-participants integer 2 да Лимит участников
position integer 2 да Позиция в списке

* Обязательные поля

Фильтры

Получить список видов услуг, созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/service-kinds" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/service-kinds?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/service-kinds?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/service-kinds?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/service-kinds?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/service-kinds?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/service-kinds?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести виды услуг, созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести виды услуг, созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести виды услуг, обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести виды услуг, обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Категории видов услуг

Создание категории видов услуг

curl "https://app.synergycrm.ru/api/v1/service-kind-categories" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"service-kind-categories",
         "attributes":{
           "name":"Основные"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/service-kind-categories");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"service-kind-categories\",\"attributes\":{\"name\":\"Основные\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/service-kind-categories')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"service-kind-categories",
         "attributes":{
           "name":"Основные"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"service-kind-categories",
         "attributes":{
           "name":"Основные"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/service-kind-categories", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/service-kind-categories',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"service-kind-categories",
         "attributes":{
           "name":"Основные"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/service-kind-categories"

payload = json.dumps({
       "data":{
         "type":"service-kind-categories",
         "attributes":{
           "name":"Основные"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/service-kind-categories'));
  request.body = json.encode({
       "data":{
         "type":"service-kind-categories",
         "attributes":{
           "name":"Основные"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Атрибуты

Атрибуты категорий услуг

{
  "data": {
    "id": "2",
    "type": "service-kind-categories",
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/service-kind-categories/2"
    },
    "attributes": {
      "created-at": "2022-02-22T12:02:22.222+03:00",
      "updated-at": "2022-02-22T12:02:22.222+03:00",
      "name": "Основные",
      "position": 2
    }
  }
}
Имя Тип Пример Запись Описание
name* string Основные да Название
position integer 1 да Позиция в списке

* Обязательные поля

Фильтры

Получить список категорий услуг созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/service-kind-categories" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/service-kind-categories?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/service-kind-categories?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/service-kind-categories?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/service-kind-categories?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/service-kind-categories?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/service-kind-categories?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести категории услуг, созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести категории услуг, созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести категории услуг, обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести категории услуг, обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Статусы записи

Создание статуса записи

curl "https://app.synergycrm.ru/api/v1/entry-statuses" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"entry-statuses",
         "attributes":{
           "name":"Статус записи в API",
           "color":"#000000"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/entry-statuses");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"entry-statuses\",\"attributes\":{\"name\":\"Статус записи в API\",\"color\":\"#000000\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/entry-statuses')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"entry-statuses",
         "attributes":{
           "name":"Статус записи в API",
           "color":"#000000"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"entry-statuses",
         "attributes":{
           "name":"Статус записи в API",
           "color":"#000000"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/entry-statuses", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/entry-statuses',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"entry-statuses",
         "attributes":{
           "name":"Статус записи в API",
           "color":"#000000"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/entry-statuses"

payload = json.dumps({
       "data":{
         "type":"entry-statuses",
         "attributes":{
           "name":"Статус записи в API",
           "color":"#000000"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/entry-statuses'));
  request.body = json.encode({
       "data":{
         "type":"entry-statuses",
         "attributes":{
           "name":"Статус записи в API",
           "color":"#000000"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Атрибуты

Атрибуты статуса записи

{
  "data": {
    "id": "2",
    "type": "entry-statuses",
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/entry-statuses/2"
    },
    "attributes": {
      "created-at": "2022-02-22T12:02:22.222+03:00",
      "updated-at": "2022-02-22T12:02:22.222+03:00",
      "name":"Статус записи в API",
      "color":"#000000",
      "position": 2
    }
  }
}
Имя Тип Пример Запись Описание
name* string Статус записи в API да Название
color string #c6c6c6 да Цвет
position integer 1 да Позиция в списке

* Обязательные поля

Фильтры

Получить список статусов записей созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/entry-statuses" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/entry-statuses?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/entry-statuses?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/entry-statuses?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/entry-statuses?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/entry-statuses?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/entry-statuses?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести статусы записей, созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести статусы записей, созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести статусы записей, обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести статусы записей, обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Телефония

Создание телефонии

curl "https://app.synergycrm.ru/api/v1/telephonies" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"telephonies",
         "attributes":{
           "provider":"mango",
           "mango-code":"1122",
           "mango-sign-key":"signkey"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/telephonies");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"telephonies\",\"attributes\":{\"provider\":\"mango\",\"mango-code\":\"1122\",\"mango-sign-key\":\"signkey\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/telephonies')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{       
  "data":{         
    "type":"telephonies",         
    "attributes":{           
      "provider":"mango",           
      "mango-code":"1122",           
      "mango-sign-key":"signkey"         
      }       
    }     
  }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{       
  "data":{         
    "type":"telephonies",         
    "attributes":{           
      "provider":"mango",           
      "mango-code":"1122",           
      "mango-sign-key":"signkey"         
      }       
    }     
  }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/telephonies", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/telephonies',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{       
  "data":{         
    "type":"telephonies",         
    "attributes":{           
      "provider":"mango",           
      "mango-code":"1122",           
      "mango-sign-key":"signkey"         
      }       
    }     
  }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/telephonies"

payload = json.dumps({       
  "data":{         
    "type":"telephonies",         
    "attributes":{           
      "provider":"mango",           
      "mango-code":"1122",           
      "mango-sign-key":"signkey"         
      }       
    }     
  })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/telephonies'));
  request.body = json.encode({       
  "data":{         
    "type":"telephonies",         
    "attributes":{           
      "provider":"mango",           
      "mango-code":"1122",           
      "mango-sign-key":"signkey"         
      }       
    }     
  });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type telephonies
URL /api/v1/telephonies
Список GET /api/v1/telephonies
Чтение GET /api/v1/telephonies/{id}
Создание POST /api/v1/telephonies
Редактирование PATCH /api/v1/telephonies/{id}
Удаление DELETE /api/v1/telephonies/{id}

Атрибуты

Атрибуты телефонии

{
    "data": {
        "type":"telephonies",
        "id":"2",
        "attributes":{
            "provider":"mango",
            "sipuni-integration-key": null,
            "sipuni-system-number": null,
            "mango-code":"1122",
            "mango-sign-key":"signkey",
            "oktell-order-call-url": null,
            "dialog-order-call-url": null,
            "created-at":"2022-02-22T12:02:22.222+03:00",
            "updated-at":"2022-02-22T12:02:22.222+03:00"
        }
    }
}
Имя Тип Пример Запись Описание
provider* string mango да Провайдер телефонии
created-at datetime 2022-02-22T12:02:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:02:22.222+03:00 нет Дата обновления
archived-at datetime 2022-02-22T12:02:22.222+03:00 да Дата архивации

* Обязательные поля

Ограничения по значениям

Аттрибут Варианты
provider API,sipuni,mango,bmi_telecom,oktell,dialog

Некоторые атрибуты зависят от провайдера телефонии.

Атрибуты Sipuni

Имя Тип Пример Запись Описание
sipuni-integration-key string 110012 да Ключ интеграции Sipuni
sipuni-system-number string SomeKey да Системный номер в Sipuni

Атрибуты Mango

Имя Тип Пример Запись Описание
mango-code string SomeKey да Код интеграции Mango
mango-sign-key string 10201110 да Ключ интеграции Mango

Атрибуты Oktell

Имя Тип Пример Запись Описание
oktell-order-call-url string http://example.com/ да URL для запроса звонка в Oktell

Атрибуты Dialog

Имя Тип Пример Запись Описание
dialog-order-call-url string http://example.com/ да URL для запроса звонка в Dialog

Фильтры

Получить список телефоний созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/telephonies" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/telephonies");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");
		httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("filter[created-at-gte]=2022.02.22 12:00");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/telephonies')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/x-www-form-urlencoded'
req['Authorization'] = 'Bearer api_token'

req.body = 'filter[created-at-gte]=2022.02.22 12:00'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`filter[created-at-gte]=2022.02.22 12:00`)
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/telephonies", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/telephonies?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/telephonies?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text) 

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/telephonies?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести телефонии созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести телефонии созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести телефонии обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести телефонии обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00
table-state-id Вывести телефонии по заданному табличному фильтру filter[table-state-id]=2
q Вывести телефонии по поисковому запросу filter[q]=some-query

Номера

Создание номера

curl "https://app.synergycrm.ru/api/v1/telephony-phones" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"telephony-phones",
         "attributes":{
           "number":"+79876543211"
         },
         "relationships":{
           "telephony":{
             "data":{
               "type":"telephonies",
               "id":"2"
             }
           },
           "user":{
             "data":{
               "type":"users",
               "id":"2"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/telephony-phones");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"telephony-phones\",\"attributes\":{\"number\":\"+79876543211\"},\"relationships\":{\"telephony\":{\"data\":{\"type\":\"telephonies\",\"id\":\"2\"}},\"user\":{\"data\":{\"type\":\"users\",\"id\":\"2\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/telephony-phones')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"telephony-phones",
         "attributes":{
           "number":"+79876543211"
         },
         "relationships":{
           "telephony":{
             "data":{
               "type":"telephonies",
               "id":"2"
             }
           },
           "user":{
             "data":{
               "type":"users",
               "id":"2"
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"telephony-phones",
         "attributes":{
           "number":"+79876543211"
         },
         "relationships":{
           "telephony":{
             "data":{
               "type":"telephonies",
               "id":"2"
             }
           },
           "user":{
             "data":{
               "type":"users",
               "id":"2"
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/telephony-phones", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/telephony-phones',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"telephony-phones",
         "attributes":{
           "number":"+79876543211"
         },
         "relationships":{
           "telephony":{
             "data":{
               "type":"telephonies",
               "id":"2"
             }
           },
           "user":{
             "data":{
               "type":"users",
               "id":"2"
             }
           }
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/telephony-phones"

payload = json.dumps({
       "data":{
         "type":"telephony-phones",
         "attributes":{
           "number":"+79876543211"
         },
         "relationships":{
           "telephony":{
             "data":{
               "type":"telephonies",
               "id":"2"
             }
           },
           "user":{
             "data":{
               "type":"users",
               "id":"2"
             }
           }
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/telephony-phones'));
  request.body = json.encode({
       "data":{
         "type":"telephony-phones",
         "attributes":{
           "number":"+79876543211"
         },
         "relationships":{
           "telephony":{
             "data":{
               "type":"telephonies",
               "id":"2"
             }
           },
           "user":{
             "data":{
               "type":"users",
               "id":"2"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type telephony-phones
URL /api/v1/telephony-phones
Список GET /api/v1/telephony-phones
Чтение GET /api/v1/telephony-phones/{id}
Создание POST /api/v1/telephony-phones
Редактирование PATCH /api/v1/telephony-phones/{id}
Удаление DELETE /api/v1/telephony-phones/{id}

Атрибуты номеров

Атрибуты номеров

{
    "data": {
        "type":"telephony-phones",
        "id":"1",
        "attributes":{
            "number":"112",
            "created-at":"2016-11-26T12:07:51.572+03:00",
            "updated-at":"2016-11-26T12:07:51.572+03:00"
        }
    }
}
Имя Тип Пример Запись Описание
number* string 3301 да Номер телефона
created-at datetime 2016-11-26T12:07:51.572+03:00 да Дата создания
updated-at datetime 2016-11-26T12:07:51.572+03:00 нет Дата обновления

* Обязательные поля

Связи номеров

Пример данных

{
    "data": {
        "type":"telephonies-phones",
        "id":"1",
        "relationships":{
            "telephony":{
                "links":{
                    "self":"/api/v1/telephonies-phone/1/relationships/telephony",
                    "related":"/api/v1/telephonies-phone/1/telephony"
                }
            },
            "user":{
                "links":{
                    "self":"/api/v1/telephonies-phone/1/relationships/user",
                    "related":"/api/v1/telephonies-phone/1/user"
                }
            }
        }
    }
}

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources. Для создания номера телефона, в связях обязательно должны указываться сотрудник, которому присваивается номер, и телефония, в которой этот номер будет функционировать.

Название Связь JSON API type
Телефония telephony telephonies
Сотрудник user users

Фильтры

Получить список номеров телефонов по определённому пользователю

curl -G "https://app.synergycrm.ru/api/v1/telephony-phones" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[user]=2"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/telephony-phones?filter[user]=2");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/telephony-phones?filter[user]=2')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/telephony-phones?filter[user]=2", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/telephony-phones?filter[user]=2',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/telephony-phones?filter[user]=2"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/telephony-phones?filter[user]=2'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
user Вывести номера по определенному user filter[user]=2
created-at-gte Вывести номера созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести номера созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести номера обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести номера обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Звонки

Создание звонка

curl "https://app.synergycrm.ru/api/v1/telephony-calls" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"telephony-calls",
         "attributes":{
           "direction":"planned",
           "src-phone-number":"+79876543211",
           "planned-at":"2022-02-02 12:22:22 +0300"
         },
         "relationships":{
           "telephony":{
             "data":{
               "type":"telephonies",
               "id":"3"
             }
           },
           "dst-phone":{
             "data":{
               "type":"telephony-phones",
               "id":"2"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/telephony-calls");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"telephony-calls\",\"attributes\":{\"direction\":\"planned\",\"src-phone-number\":\"+79876543211\",\"planned-at\":\"2022-02-02 12:22:22 +0300\"},\"relationships\":{\"telephony\":{\"data\":{\"type\":\"telephonies\",\"id\":\"3\"}},\"dst-phone\":{\"data\":{\"type\":\"telephony-phones\",\"id\":\"2\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/telephony-calls')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"telephony-calls",
         "attributes":{
           "direction":"planned",
           "src-phone-number":"+79876543211",
           "planned-at":"2022-02-02 12:22:22 +0300"
         },
         "relationships":{
           "telephony":{
             "data":{
               "type":"telephonies",
               "id":"3"
             }
           },
           "dst-phone":{
             "data":{
               "type":"telephony-phones",
               "id":"2"
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"telephony-calls",
         "attributes":{
           "direction":"planned",
           "src-phone-number":"+79876543211",
           "planned-at":"2022-02-02 12:22:22 +0300"
         },
         "relationships":{
           "telephony":{
             "data":{
               "type":"telephonies",
               "id":"3"
             }
           },
           "dst-phone":{
             "data":{
               "type":"telephony-phones",
               "id":"2"
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/telephony-calls", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/telephony-calls',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"telephony-calls",
         "attributes":{
           "direction":"planned",
           "src-phone-number":"+79876543211",
           "planned-at":"2022-02-02 12:22:22 +0300"
         },
         "relationships":{
           "telephony":{
             "data":{
               "type":"telephonies",
               "id":"3"
             }
           },
           "dst-phone":{
             "data":{
               "type":"telephony-phones",
               "id":"2"
             }
           }
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/telephony-calls"

payload = json.dumps({
       "data":{
         "type":"telephony-calls",
         "attributes":{
           "direction":"planned",
           "src-phone-number":"+79876543211",
           "planned-at":"2022-02-02 12:22:22 +0300"
         },
         "relationships":{
           "telephony":{
             "data":{
               "type":"telephonies",
               "id":"3"
             }
           },
           "dst-phone":{
             "data":{
               "type":"telephony-phones",
               "id":"2"
             }
           }
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/telephony-calls'));
  request.body = json.encode({
       "data":{
         "type":"telephony-calls",
         "attributes":{
           "direction":"planned",
           "src-phone-number":"+79876543211",
           "planned-at":"2022-02-02 12:22:22 +0300"
         },
         "relationships":{
           "telephony":{
             "data":{
               "type":"telephonies",
               "id":"3"
             }
           },
           "dst-phone":{
             "data":{
               "type":"telephony-phones",
               "id":"2"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type telephony-calls
URL /api/v1/telephony-calls
Список GET /api/v1/telephony-calls
Чтение GET /api/v1/telephony-calls/{id}
Создание POST /api/v1/telephony-calls
Редактирование PATCH /api/v1/telephony-calls/{id}
Удаление DELETE /api/v1/telephony-calls/{id}

Атрибуты звонков

Атрибуты звонка

{
  "data": {
      "type":"telephony-calls",
      "id":"2",
      "attributes":{
          "call-id": "61bbb785-4a8c-4188-97f0-1cc7400e587f",
          "direction":"outgoing",
          "dst-phone-number": "+79876543211",
          "src-phone-number":"222",
          "duration": 2000.0,
          "created-at":"2022-02-22T12:22:22.222+03:00",
          "completed-at":"2022-02-22T12:22:22.222+03:00",
          "updated-at":"2022-02-22T12:22:22.222+03:00",
          "planned-at": null,
          "answered-at": "2022-02-22T12:22:22.222+03:00"
      }
   }
}
Имя Тип Пример Запись Описание
dst-phone-number* string +79876543211 да Номер входящего телефона
src-phone-number* string 222 да Номер исходящего телефона
direction* string incoming да Тип звонка
call-id string 61bbb785-4a8c-4188-97f0-1cc7400e587f да Идентификатор звонка в АТС
duration double 20000.0 да Длительность звонка
recording string b1a13646 да Идентификатор записи или ссылка на неё
answered-at datetime 2022-02-22T12:22:22.222+03:00 да Дата ответа на звонок
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
started-at datetime 2022-02-22T12:22:22.222+03:00 да Дата начала звонка
completed-at datetime 2022-02-22T12:22:22.222+03:00 да Дата окончания звонка
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления
planned-at datetime 2022-02-22T12:22:22.222+03:00 да Плановая дата звонка

* Обязательные поля

Связи звонков

Пример данных (перечислены не все связи)

{
  "data": {
      "type":"telephonies-calls",
      "id":"2",
      "relationships":{
          "src-phone":{
              "links":{
                  "self":"/api/v1/telephonies-phone/2/relationships/src-phone",
                  "related":"/api/v1/telephonies-phone/2/src-phone"
               }
          },
          "dst-phone":{
              "links":{
                  "self":"/api/v1/telephonies-phone/2/relationships/dst-phone",
                  "related":"/api/v1/telephonies-phone/2/dst-phone"
              }
          }
      }
   }
}

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources. Для создания номера телефона, в связях обязательно должен указываться номер в телефонии. В зависимости от типа звонка, указанного в поле direction, привязываться он дожен к разным связям.

Название Связь JSON API type
Телефония* telephony telephonies
Звонящий номер src-phone telephony-phones
Целевой номер dst-phone telephony-phones
Статус status telephony-statuses

* Обязательная связь

Обязательные связи в зависимости от ключа

Ключ Обязательные связи Описание
outgoing src-phone Исходящий звонок
incoming dst-phone Входящий звонок
internal src-phone и dst-phone Внутренний звонок
planned dst-phone Плановый звонок
error src-phone или dst-phone Ошибка

Фильтры

Получить список звонков созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/telephony-calls" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/telephony-calls?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/telephony-calls?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/telephony-calls?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/telephony-calls?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/telephony-calls?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/telephony-calls?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести звонки созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести звонки созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести звонки обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести звонки обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Аудиозаписи

Получение аудиозаписей звонка

curl "https://app.synergycrm.ru/api/v1/telephony-calls/1/recordings" \
  -X GET \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/telephony-calls/1/recordings");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/telephony-calls/1/recordings')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/telephony-calls/1/recordings", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/telephony-calls/1/recordings',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/telephony-calls/1/recordings"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart


import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/telephony-calls/1/recordings'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type telephony-calls
Аудиозаписи GET /api/v1/telephony-calls/{id}/recordings

Атрибуты аудиозаписей звонков

Пример готовых данных

{
  "data": {
      "type":"telephony-calls",
      "id":"2",
      "attributes": {
          "recordings": [
              "https://example.com/path/to/audio.mp3"
          ],
          "recordings_expires_at":"2022-02-22T12:22:22.222+03:00"
      }
   }
}
Имя Тип Пример Описание
recordings array ["https://example.com/path/to/audio.mp3"] Аудиозаписи звонка
recordings_expires_at datetime 2022-02-22T12:22:22.222+03:00 Время удаления загруженной аудиозаписи

Прежде чем получить аудиозаписи звонка, система загружает их, указывая время удаления прокэшированных копий в recordings_expires_at. Поэтому, при обращении к данному методу в тот момент, когда срок хранения записи уже истек, вы получите сообщение о подготовке данных. В этом случае, для получения аудиозаписей, повторите запрос через 10 секунд.

Пример подготавливаемых данных

 {
   "data": {
       "type":"telephony-calls",
       "id":"2",
       "attributes": {
           "status":"Идет загрузка записи звонка, повторите запрос через 10 секунд"
       }
    }
 }

Статусы

Создание статуса

curl "https://app.synergycrm.ru/api/v1/telephony-statuses" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"telephony-statuses",
         "attributes":{
           "name":"Статус телефонии в API",
           "color":"#000000"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/telephony-statuses");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"telephony-statuses\",\"attributes\":{\"name\":\"Статус телефонии в API\",\"color\":\"#000000\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/telephony-statuses')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"telephony-statuses",
         "attributes":{
           "name":"Статус телефонии в API",
           "color":"#000000"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"telephony-statuses",
         "attributes":{
           "name":"Статус телефонии в API",
           "color":"#000000"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/telephony-statuses", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/telephony-statuses',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"telephony-statuses",
         "attributes":{
           "name":"Статус телефонии в API",
           "color":"#000000"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/telephony-statuses"

payload = json.dumps({
       "data":{
         "type":"telephony-statuses",
         "attributes":{
           "name":"Статус телефонии в API",
           "color":"#000000"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/telephony-statuses'));
  request.body = json.encode({
       "data":{
         "type":"telephony-statuses",
         "attributes":{
           "name":"Статус телефонии в API",
           "color":"#000000"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type telephony-statuses
URL /api/v1/telephony-statuses
Список GET /api/v1/telephony-statuses
Чтение GET /api/v1/telephony-statuses/{id}
Создание POST /api/v1/telephony-statuses
Редактирование PATCH /api/v1/telephony-statuses/{id}
Удаление DELETE /api/v1/telephony-statuses/{id}

Атрибуты

Атрибуты статусов

{
    "data": {
        "type":"telephony-statuses",
        "id":"2",
        "attributes":{
            "created-at":"2022-02-22T12:22:22.222+03:00",
            "updated-at":"2022-02-22T12:22:22.222+03:00",
            "name": "Мой статус телефонии",
            "color": "#1f2f3f"
        }
    }
}
Имя Тип Пример Запись Описание
name* string Мой статус телефонии да Имя статуса телефонии
color string #1f2f3f да Цвет статуса телефонии
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список статусов звонков созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/telephony-statuses" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/telephony-statuses?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/telephony-statuses?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/telephony-statuses?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/telephony-statuses?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/telephony-statuses?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/telephony-statuses?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести статусы телефонии созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести статусы телефонии созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести статусы телефонии обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести статусы телефонии обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Telephony engine

Интеграция подойдет тем, кто готов самостоятельно реализовать отправку данных (со своего сервера телефонии) о звонках в Synergy CRM и обработку запросов на заказ звонка от Synergy CRM.

Подключение на стороне Synergy CRM

В настройках системы, в подразделе "Интеграции" выбираем интеграцию, "Synergy API", далее в появившемся окне указываем: - адрес заказа звонка (например https://my_telephony_host.ru/order/call)

После сохранения формы, в блоке с телефониями появится ваша интеграция. Кликнув вашей телефонии, отобразится модальное окно, в котором будет указан URL уведомлений (вида https://telephony.app.synergycrm.ru/telephony_external…), на который необходимо будет отправлять POST запросом информацию о звонках. Так же в этом окне необходимо будет указать каким сотрудникам какие внутренние номера соответствуют.

Заказ звонка из Synergy CRM

После того, как пользователям будут присвоены внут. номера, то любое нажатие на номер контакта/компании будет вызывать popover-окно, где можно будет инициировать заказ звонка. Технически в этот момент произойдет отправка POST-запроса на URL который указан в первом пункте, в теле POST-запроса будут указаны:

{
  src_phone: '200',
  dst_phone: '79876543211',
  signature*: 'dac5f5967202b4cf6a0e075f4b9db3ce'
}

Сиситема Synergy CRM ожидает, также, обычный POST запрос:

curl "https://telephony.app.synergycrm.ru/telephony_external/6693d051-1111-2222-3333-000000000000" \
-X POST \ -H "Content-Type: application/x-www-form-urlencoded" \
-d @- << EOF src_number=200&started_at=2022-02-22T12:22:22+03:00&answered_at=2022-02-22T12:22:22+03:00&completed_at=2022-02-22T12:22:22+03:00&direction=outgoing&dst_number=79876543211&duration=20&status=answered&call_id=123456789

Расчет поля signature был выполнен методом MD5 от строки: dst_phone79876543211src_phone200TOKEN В качестве ответа на запрос, ожидается получение 200 серверного статуса. При многократном (5 попыток) получении статуса отличного от 200, интеграция клиента в Synergy CRM переводится из активного, в неактивный режим и указывается причина. Signature поле заполняется только в случае, когда в настройках интеграции выставлен флаг "Проверка данных".

Уведомления о звонках из АТС в Synergy CRM

Для доставки информации о звонках в Synergy CRM необходимо на выданный URL (см 1 пункт) отправлять POST запросом следующие атрибуты звонка:

Атрибут Ключ Пример Запись
Номер звонящего* src_phone 200 -
Номер принимающего* dst_phone 79876543211 -
Направление* direction outgoing outgoing - исходящий;
incoming - входящий;
internal - внутренний;
planned - запланированный;
undefined - не определен
ID звонка* call_id MjUyNjE1MzM1NTozNji= Любая уникальная строка до 255 символов
Длительность duration 2000 Количество секунд
Время начала звонка started_at 2022-02-22T12:22:22.222+03:00 Формат iso8601
Время ответа на звонок answered_at 2022-02-22T12:22:22.222+03:00 Формат iso8601
Время завершения звонка completed_at 2022-02-22T12:22:22.222+03:00 Формат iso8601
Статус звонка status answered answered - отвечен;
busy - занято;
no_answer - нет ответа;
cancel - вызов сброшен;
undefined - не определен
Ссылка на аудиозапись record https://host/audio.mp3 -

* Обязательные поля Уточнение по обязательным полям, в зависимости от направления звонка

Обязательные поля в зависимотси от направления звонка

Направление Обязательные поля Описание
outgoing src_phone Исходящий звонок
incoming dst_phone Входящий звонок
internal src_phone && dst_phone Внутренний звонок
planned dst_phone Плановый звонок
error src_phone && dst_phone Ошибка

Сценарии доставки уведомлений

Сценарий доставки уведомлений может быть двух видов: 1. Отправка уведомлений по мере их инициализации на сервере телефонии.

Например, как только поступил входящий звонок, то формируется запрос в котором указаны: src_phone=79876543211, dst_phone=200 и started_at=2022-02-22T12:22:22.222+03:00, call_id=MasOIEqwe1aq

Далее, как только была поднята трубка, то отправляется ещё один запрос с дополненными атрибутами: src_phone=79876543211, dst_phone=200, started_at=2022-02-22T12:22:22.222+03:00, call_id=MasOIEqwe1aq, status=answered, answered_at=2022-02-22T12:22:22.222+03:00.

Далее, звонок был завершен, повторяем отправку с новой информацией: src_phone=79876543211, dst_phone=200, started_at=2022-02-22T12:22:22.222+03:00, call_id=MasOIEqwe1aq, status=answered, answered_at=2022-02-22T12:22:22.222+03:00, completed_at=2022-02-22T12:22:22.222+03:00, duration=2000, recording=https://host/audio.mp3.

Не забываем, что каждый запрос должен содержать рассчитанный хэш в поле signature (только если опция проверки данных включена в настройках интеграции).

  1. Отправка уведомлений (один звонок == одно уведомление).

По окончанию звонка или по таймауту сервер телефонии делает отправку истории звонков. В момент обработки уведомлений на стороне Synergy CRM происходит следующее:

Дополнение: Синхронный ответ с телом объекта, в ближайшее время будет заменен на ID звонка в очереди обработки звонков, узнать о статусе обработки можно будет воспользовавшись методами https://api.synergycrm.ru/#telephony_calls.

Правило расчета подписи (signature)

Целостность запросов как в случае с заказом звонка, так и в случае с уведомлениями можно проверить по хэшу в поле signature. Для этого необходимо сгенерировать хэш алгоритмом md5 от строки параметров и значений, отсортированной в алфавитном порядке по имени ключа и добавленным токеном в конец этой строки.

Исходные параметры:

{
dst_phone: '222',
src_phone: '200',
direction: 'internal',
duration: '2000',
started_at: '2022-02-22T12:22:22.222+03:00'
}

Сортируем в алфавитном порядке по ключу:

{
dst_phone: '222',
src_phone: '200',
direction: 'internal',
duration: '2000',
started_at: '2022-02-22T12:22:22.222+03:00'
}

Преобразуем в строку и добавим в конец токен:

directioninternaldst_phone222duration2000src_phone200started_at2022-02-22T12:22:22 .222+03:00TOKEN

Генерируем от полученной строки хэш: 4655a2c26466969e1c73f5ed4a8df503

Продукты

Создание продукта с предустановленными типом и статусом

curl "https://app.synergycrm.ru/api/v1/products" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"products",
         "attributes":{
           "name":"Продукт по API",
           "description":"Продукт созданный при помощи API",
           "purchase-price":20000.0
         },
         "relationships":{
           "product-type":{
             "data":{
               "type":"product-types",
               "id":"22"
             }
           },
           "status":{
             "data":{
               "type":"product-statuses",
               "id":"2"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/products");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"products\",\"attributes\":{\"name\":\"Продукт по API\",\"description\":\"Продукт созданный при помощи API\",\"purchase-price\":20000.0},\"relationships\":{\"product-type\":{\"data\":{\"type\":\"product-types\",\"id\":\"22\"}},\"status\":{\"data\":{\"type\":\"product-statuses\",\"id\":\"2\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/products')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{       
  "data":{         
    "type":"products",         
    "attributes":{           
      "name":"Продукт по API",           
      "description":"Продукт созданный при помощи API",           
      "purchase-price":20000.0         
      },         
      "relationships":{           
        "product-type":{             
          "data":{               
            "type":"product-types",               
            "id":"22"             
          }           
        },           
        "status":{             
          "data":{               
            "type":"product-statuses",               
            "id":"2"             
          }           
        }         
      }       
    }     
  }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{       
  "data":{         
    "type":"products",         
    "attributes":{           
      "name":"Продукт по API",           
      "description":"Продукт созданный при помощи API",           
      "purchase-price":20000.0         
      },         
      "relationships":{           
        "product-type":{             
          "data":{               
            "type":"product-types",               
            "id":"22"             
          }           
        },           
        "status":{             
          "data":{               
            "type":"product-statuses",               
            "id":"2"             
          }           
        }         
      }       
    }     
  }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/products", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/products',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{       
  "data":{         
    "type":"products",         
    "attributes":{           
      "name":"Продукт по API",           
      "description":"Продукт созданный при помощи API",           
      "purchase-price":20000.0         
      },         
      "relationships":{           
        "product-type":{             
          "data":{               
            "type":"product-types",               
            "id":"22"             
          }           
        },           
        "status":{             
          "data":{               
            "type":"product-statuses",               
            "id":"2"             
          }           
        }         
      }       
    }     
  }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/products"

payload = json.dumps({       
  "data":{         
    "type":"products",         
    "attributes":{           
      "name":"Продукт по API",           
      "description":"Продукт созданный при помощи API",           
      "purchase-price":20000.0         
      },         
      "relationships":{           
        "product-type":{             
          "data":{               
            "type":"product-types",               
            "id":"22"             
          }           
        },           
        "status":{             
          "data":{               
            "type":"product-statuses",               
            "id":"2"             
          }           
        }         
      }       
    }     
  })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/products'));
  request.body = json.encode({       
  "data":{         
    "type":"products",         
    "attributes":{           
      "name":"Продукт по API",           
      "description":"Продукт созданный при помощи API",           
      "purchase-price":20000.0         
      },         
      "relationships":{           
        "product-type":{             
          "data":{               
            "type":"product-types",               
            "id":"22"             
          }           
        },           
        "status":{             
          "data":{               
            "type":"product-statuses",               
            "id":"2"             
          }           
        }         
      }       
    }     
  });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Пример установки обложки.

curl "https://app.synergycrm.ru/api/v1/products/10" \
  -X PATCH \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"products",
         "id":"22",
         "relationships":{
           "cover":{
             "data":{
               "type":"documents",
               "id":"222"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/products/10");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("PATCH");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"products\",\"id\":\"22\",\"relationships\":{\"cover\":{\"data\":{\"type\":\"documents\",\"id\":\"222\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/products/10')
req = Net::HTTP::Patch.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{       
  "data":{         
    "type":"products",         
    "id":"22",         
    "relationships":{           
      "cover":{             
        "data":{               
          "type":"documents",               
          "id":"222"             
          }           
        }         
      }       
    }     
  }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{       
  "data":{         
    "type":"products",         
    "id":"22",         
    "relationships":{           
      "cover":{             
        "data":{               
          "type":"documents",               
          "id":"222"             
          }           
        }         
      }       
    }     
  }`)
	req, err := http.NewRequest("PATCH", "https://app.synergycrm.ru/api/v1/products/10", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/products/10',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{       
  "data":{         
    "type":"products",         
    "id":"22",         
    "relationships":{           
      "cover":{             
        "data":{               
          "type":"documents",               
          "id":"222"             
          }           
        }         
      }       
    }     
  }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/products/10"

payload = json.dumps({       
  "data":{         
    "type":"products",         
    "id":"22",         
    "relationships":{           
      "cover":{             
        "data":{               
          "type":"documents",               
          "id":"222"             
          }           
        }         
      }       
    }     
  })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/products/10'));
  request.body = json.encode({       
  "data":{         
    "type":"products",         
    "id":"22",         
    "relationships":{           
      "cover":{             
        "data":{               
          "type":"documents",               
          "id":"222"             
          }           
        }         
      }       
    }     
  });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type products
URL /api/v1/products
Список GET /api/v1/products
Чтение GET /api/v1/products/{id}
Создание POST /api/v1/products
Редактирование PATCH /api/v1/products/{id}
Удаление DELETE /api/v1/products/{id}

Атрибуты

Атрибуты продукта

{
  "data": {
      "type":"products",
      "id": 2,
      "attributes":{
        "name": "Мое название продукта",
        "description": "Мое описание продукта",
        "cost-price": 200.0,
        "selling-price": 200.0,
        "purchase-price": 20.0,
        "code": "10110",
        "number": 2,
        "vendor-code": "1BM40",
        "is-service": false,
        "cover-image": "https://example.com/path/to/file.jpg",
        "customs":{
          "custom-943":"2022-02-22T12:02:22.222+03:00"
        },
        "created-at":"2022-02-22T12:02:22.222+03:00",
        "updated-at":"2022-02-22T12:02:22.222+03:00"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Мое название продукта да Название товара
description string Мое описание продукта да Описание товара
code string 11030 да Код
vendor-code string 1BM40 да Артикул
is-service boolean true да Услуга
purchase-price decimal 20.0 да Цена закупки
cost-price decimal 200.0 нет Себестоимость
selling-price decimal 200.0 да Цена продажи
customs hash {"custom-1":'custom value'} да Свои поля
created-at datetime 2022-02-22T12:02:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:02:22.222+03:00 нет Дата обновления
discarded-at datetime 2022-02-22T12:02:22.222+03:00 да Дата перемещения в корзину
cover-image string https://example.com/path/to/file.jpg нет Обложка.**
volume decimal 2.0 да Объём
weight decimal 20.0 да Вес, кг
ccd string 11111111 / 111111 / 1111111 да ГТД
country string Россия да Страна
vat decimal 20.0 да НДС
number bigint 2 да Номер продукта

* Обязательные поля ** Обложка может быть установлена только из тех документов, которые уже связаны с продуктом и являются изображением.

Связи

Пример данных (перечислены не все связи)

{
  "data": {
    "type":"products",
    "id":"2",
    "relationships":{
      "status":{
        "links":{
          "self":"/api/v1/products/2/relationships/status",
          "related":"/api/v1/products/2/status"
        }
      },
      "category":{
        "links":{
          "self":"/api/v1/products/2/relationships/category",
          "related":"/api/v1/products/2/category"
        }
      }
    }
  }
}

Пример запроса с загруженными статусами и категориями продуктов

curl "https://app.synergycrm.ru/api/v1/products?include=status,category" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/products?include=status,category");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/products?include=status,category')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/products?include=status,category", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/products?include=status,category',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/products?include=status,category"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/products?include=status,category'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Получить продукты по связанным реквизитам юридического лица аккаунта (org-detail)

curl -G "http://app.synergycrm.ru/api/v1/products?filter[org-detail-id]=2" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Категория category product-categories
Статус status product-statuses
Скидка discount product-discounts
Единица измерения unit product-units
Склад store stores
Задачи diaries diaries
Заявки orders orders
Сделки deals deals
Изображения images documents
Обложка cover documents
Документы documents documents
Ответственная организация org-detail org-details

Фильтры

Получить список продуктов по определённому контакту

curl -G "https://app.synergycrm.ru/api/v1/products/?filter[contacts]=2" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/products/?filter[contacts]=2");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/products/?filter[contacts]=2')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/products/?filter[contacts]=2", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/products/?filter[contacts]=2',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/products/?filter[contacts]=2"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/products/?filter[contacts]=2'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
contacts Вывести продукты по определенному contacts filter[contacts]=2
companies Вывести продукты по определенному companies filter[companies]=2
deals Вывести продукты по определенному deals filter[deals]=2
orders Вывести продукты по определенному orders filter[orders]=2
diaries Вывести продукты по определенному diaries filter[diaries]=2
record-objects Вывести продукты по определенному record-objects filter[record-objects]=2
created-at-gte Вывести продукты созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести продукты созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести продукты обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести продукты обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00
code Вывести продукты по определенному code filter[code]=Q123
q Вывести продукты по поисковому запросу filter[q]=some-query
archived Вывести продукты в архиве filter[archived]=2
discarded Вывести продукты в корзине filter[discarded]=2
actual Вывести актуальные продукты filter[actual]=2
discarded-at-null Вывести продукты не в корзине filter[discarded-at-null]=true
org-details Вывести продукты по связанным реквизитам аккаунта org-detail-id filter[org-detail-id]=2

Категории продуктов

Создание новой категории продуктов

curl "https://app.synergycrm.ru/api/v1/product-categories" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"product-categories",
         "attributes":{
           "name":"Категория в API"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/product-categories");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"product-categories\",\"attributes\":{\"name\":\"Категория в API\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/product-categories')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"product-categories",
         "attributes":{
           "name":"Категория в API"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"product-categories",
         "attributes":{
           "name":"Категория в API"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/product-categories", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/product-categories',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"product-categories",
         "attributes":{
           "name":"Категория в API"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/product-categories"

payload = json.dumps({
       "data":{
         "type":"product-categories",
         "attributes":{
           "name":"Категория в API"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/product-categories'));
  request.body = json.encode({
       "data":{
         "type":"product-categories",
         "attributes":{
           "name":"Категория в API"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type product-categories
URL /api/v1/product-categories
Список GET /api/v1/product-categories
Чтение GET /api/v1/product-categories/{id}
Создание POST /api/v1/product-categories
Редактирование PATCH /api/v1/product-categories/{id}
Удаление DELETE /api/v1/product-categories/{id}

Атрибуты

Атрибуты категории продукта

{
  "data": {
      "type":"product-categories",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Моя категория продуктов"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Моя категория продуктов да Название категории продукта
ancestry string 112,12 нет Список родительских категорий
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Вложенные категории продуктов

Пример данных для создания подкатегории

{
  "data": {
    "type":"product-categories",
    "attributes":{
      "name":"Моя подкатегория"
    },
    "relationships":{
      "parent":{
        "data":{
          "type":"product-categories",
          "id":"2"
        }
      }
    }
  }
}

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Родитель parent product-categories
Дети children product-categories
Дерево subtree product-categories

Фильтры

Получить список категорий продуктов созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/product-categories" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/product-categories?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/product-categories?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/product-categories?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/product-categories?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/product-categories?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/product-categories?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести категории созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести категории созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести категории обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести категории обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Скидки

Создание новой скидки

curl "https://app.synergycrm.ru/api/v1/product-discounts" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"product-discounts",
         "attributes":{
           "name":"Скидка в API",
           "size":20.0
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/product-discounts");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"product-discounts\",\"attributes\":{\"name\":\"Скидка в API\",\"size\":20.0}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/product-discounts')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"product-discounts",
         "attributes":{
           "name":"Скидка в API",
           "size":20.0
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"product-discounts",
         "attributes":{
           "name":"Скидка в API",
           "size":20.0
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/product-discounts", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/product-discounts',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"product-discounts",
         "attributes":{
           "name":"Скидка в API",
           "size":20.0
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/product-discounts"

payload = json.dumps({
       "data":{
         "type":"product-discounts",
         "attributes":{
           "name":"Скидка в API",
           "size":20.0
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/product-discounts'));
  request.body = json.encode({
       "data":{
         "type":"product-discounts",
         "attributes":{
           "name":"Скидка в API",
           "size":20.0
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type product-discounts
URL /api/v1/product-discounts
Список GET /api/v1/product-discounts
Чтение GET /api/v1/product-discounts/{id}
Создание POST /api/v1/product-discounts
Редактирование PATCH /api/v1/product-discounts/{id}
Удаление DELETE /api/v1/product-discounts/{id}

Атрибуты

Атрибуты скидки продукта

{
  "data": {
      "type":"product-discounts",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Моя скидка",
        "size": "20.0"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Моя скидка да Название скидки
size* float 20.0 да Размер скидки
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Связи

Пример запроса с загруженными типами контактов

curl "https://app.synergycrm.ru/api/v1/product-discounts?include=contact-type" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/product-discounts?include=contact-type");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/product-discounts')
params = {
  :include => 'contact-type',
}
uri.query = URI.encode_www_form(params)

req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/product-discounts?include=contact-type", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/product-discounts?include=contact-type',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/product-discounts?include=contact-type"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/product-discounts?include=contact-type'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Тип контакта contact-type contact-types

Фильтры

Получить список скидок созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/product-discounts" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/product-discounts?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/product-discounts?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/product-discounts?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/product-discounts?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/product-discounts?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/product-discounts?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести скидки созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести скидки созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести скидки обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести скидки обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Промокампании

Создание промокампании

curl "https://app.synergycrm.ru/api/v1/promo-campaigns" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"promo-campaigns",
         "attributes":{
           "name": "Promo 2022",
           "start-at": "2022-02-22 00:00 +0300"
           "due-date": "2022-02-22 23:59 +0300"
           "discount": 20.0,
           "discount-mode": "percent",
           "default": false
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/promo-campaigns");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"promo-campaigns\",\"attributes\":{\"name\": \"Promo 2022\",\"start-at\": \"2022-02-22 00:00 +0300\"\"due-date\": \"2022-02-22 23:59 +0300\"\"discount\": 20.0,\"discount-mode\": \"percent\",\"default\": false}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/promo-campaigns')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"promo-campaigns",
         "attributes":{
           "name": "Promo 2022",
           "start-at": "2022-02-22 00:00 +0300"
           "due-date": "2022-02-22 23:59 +0300"
           "discount": 20.0,
           "discount-mode": "percent",
           "default": false
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"promo-campaigns",
         "attributes":{
           "name": "Promo 2022",
           "start-at": "2022-02-22 00:00 +0300"
           "due-date": "2022-02-22 23:59 +0300"
           "discount": 20.0,
           "discount-mode": "percent",
           "default": false
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/promo-campaigns", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/promo-campaigns',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"promo-campaigns",
         "attributes":{
           "name": "Promo 2022",
           "start-at": "2022-02-22 00:00 +0300"
           "due-date": "2022-02-22 23:59 +0300"
           "discount": 20.0,
           "discount-mode": "percent",
           "default": false
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/promo-campaigns"

payload = json.dumps({
       "data":{
         "type":"promo-campaigns",
         "attributes":{
           "name": "Promo 2022",
           "start-at": "2022-02-22 00:00 +0300"
           "due-date": "2022-02-22 23:59 +0300"
           "discount": 20.0,
           "discount-mode": "percent",
           "default": false
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/promo-campaigns'));
  request.body = json.encode({
       "data":{
         "type":"promo-campaigns",
         "attributes":{
           "name": "Promo 2022",
           "start-at": "2022-02-22 00:00 +0300"
           "due-date": "2022-02-22 23:59 +0300"
           "discount": 20.0,
           "discount-mode": "percent",
           "default": false
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type promo-campaigns
URL /api/v1/promo-campaigns
Список GET /api/v1/promo-campaigns
Чтение GET /api/v1/promo-campaigns/{id}
Создание POST /api/v1/promo-campaigns
Редактирование PATCH /api/v1/promo-campaigns/{id}
Удаление DELETE /api/v1/promo-campaigns/{id}

Атрибуты

Атрибуты промо-компании

{
  "data": {
      "type":"promo-campaigns",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Promo 2022",
        "start-at": "2022-02-22 00:00 +0300",
        "due-date": "2022-02-22 23:59 +0300",
        "discount": 20.0,
        "discount-mode": "percent",
        "default": false,
        "exclude-product-ids": ["1", "2"]
      }
   }
}
Имя Тип Пример Запись Описание
name* string Promo 2022 да Название промокампании
start-at* datetime 2022-02-22T12:22:22.222+03:00 да Дата и время начала действия
due-date datetime 2022-02-22T12:22:22.222+03:00 да Дата и время окончания действия
discount float 20.0 да Размер скидки
discount-mode string percent да Тип скидки: percent (процент) или fixed (фикс. сумма)
default boolean true да Определяет, является ли промокампания используемой по умолчанию
exclude-product-ids array ["1", "2"] да Идентификаторы продуктов, на которые не действует скидка
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список скидок созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/promo-campaigns" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/promo-campaigns?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/promo-campaigns?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/promo-campaigns?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/promo-campaigns?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/promo-campaigns?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/promo-campaigns?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести промо-компании созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести промо-компании созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести промо-компании обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести промо-компании обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Промокоды

Создание промокода c лимитом в 22 использования

curl "https://app.synergycrm.ru/api/v1/promocodes" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"promocodes",
         "attributes":{
           "name":"PROMO2022",
           "uses-limit": 22,
         },
         "relationships":{
           "promo-campaign":{
             "data":{
               "type": "promo-campaigns",
               "id": "2"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/promocodes");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"promocodes\",\"attributes\":{\"name\":\"PROMO2022\",\"uses-limit\": 22,},\"relationships\":{\"promo-campaign\":{\"data\":{\"type\": \"promo-campaigns\",\"id\": \"2\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/promocodes')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"promocodes",
         "attributes":{
           "name":"PROMO2022",
           "uses-limit": 22,
         },
         "relationships":{
           "promo-campaign":{
             "data":{
               "type": "promo-campaigns",
               "id": "2"
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"promocodes",
         "attributes":{
           "name":"PROMO2022",
           "uses-limit": 22,
         },
         "relationships":{
           "promo-campaign":{
             "data":{
               "type": "promo-campaigns",
               "id": "2"
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/promocodes", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/promocodes',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"promocodes",
         "attributes":{
           "name":"PROMO2022",
           "uses-limit": 22,
         },
         "relationships":{
           "promo-campaign":{
             "data":{
               "type": "promo-campaigns",
               "id": "2"
             }
           }
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/promocodes"

payload = json.dumps({
       "data":{
         "type":"promocodes",
         "attributes":{
           "name":"PROMO2022",
           "uses-limit": 22,
         },
         "relationships":{
           "promo-campaign":{
             "data":{
               "type": "promo-campaigns",
               "id": "2"
             }
           }
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/promocodes'));
  request.body = json.encode({
       "data":{
         "type":"promocodes",
         "attributes":{
           "name":"PROMO2022",
           "uses-limit": 22,
         },
         "relationships":{
           "promo-campaign":{
             "data":{
               "type": "promo-campaigns",
               "id": "2"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type promocodes
URL /api/v1/promocodes
Список GET /api/v1/promocodes
Чтение GET /api/v1/promocodes/{id}
Создание POST /api/v1/promocodes
Редактирование PATCH /api/v1/promocodes/{id}
Удаление DELETE /api/v1/promocodes/{id}

Атрибуты

Атрибуты промокода

{
  "data": {
      "type":"promocodes",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "PROMO2022",
        "uses-limit": 22,
        "active": false
      }
   }
}
Имя Тип Пример Запись Описание
name* string PROMO2022 да Промокод
uses-limit integer 22 да Лимит использования
active boolean false да Активность промокода
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список промокодов, созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/promocodes" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/promocodes?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/promocodes?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/promocodes?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/promocodes?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/promocodes?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/promocodes?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести промокоды созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести промокоды созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести промокоды обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести промокоды обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Скидки промокампании

Создание скидки промокампании

curl "https://app.synergycrm.ru/api/v1/promo-campaign-discounts" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"promo-campaign-discounts",
         "attributes":{
           "product-ids": ["1", "2"],
           "exclude-product-ids": ["1", "2"],
           "discount": 20.0,
           "discount-mode": "percent"
         },
         "relationships":{
           "promo-campaign":{
             "data":{
               "type": "promo-campaigns",
               "id": "2"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/promo-campaign-discounts");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"promo-campaign-discounts\",\"attributes\":{\"product-ids\": [\"1\", \"2\"],\"exclude-product-ids\": [\"1\", \"2\"],\"discount\": 20.0,\"discount-mode\": \"percent\"},\"relationships\":{\"promo-campaign\":{\"data\":{\"type\": \"promo-campaigns\",\"id\": \"2\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/promo-campaign-discounts')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"promo-campaign-discounts",
         "attributes":{
           "product-ids": ["1", "2"],
           "exclude-product-ids": ["1", "2"],
           "discount": 20.0,
           "discount-mode": "percent"
         },
         "relationships":{
           "promo-campaign":{
             "data":{
               "type": "promo-campaigns",
               "id": "2"
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"promo-campaign-discounts",
         "attributes":{
           "product-ids": ["1", "2"],
           "exclude-product-ids": ["1", "2"],
           "discount": 20.0,
           "discount-mode": "percent"
         },
         "relationships":{
           "promo-campaign":{
             "data":{
               "type": "promo-campaigns",
               "id": "2"
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/promo-campaign-discounts", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/promo-campaign-discounts',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"promo-campaign-discounts",
         "attributes":{
           "product-ids": ["1", "2"],
           "exclude-product-ids": ["1", "2"],
           "discount": 20.0,
           "discount-mode": "percent"
         },
         "relationships":{
           "promo-campaign":{
             "data":{
               "type": "promo-campaigns",
               "id": "2"
             }
           }
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/promo-campaign-discounts"

payload = json.dumps({
       "data":{
         "type":"promo-campaign-discounts",
         "attributes":{
           "product-ids": ["1", "2"],
           "exclude-product-ids": ["1", "2"],
           "discount": 20.0,
           "discount-mode": "percent"
         },
         "relationships":{
           "promo-campaign":{
             "data":{
               "type": "promo-campaigns",
               "id": "2"
             }
           }
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/promo-campaign-discounts'));
  request.body = json.encode({
       "data":{
         "type":"promo-campaign-discounts",
         "attributes":{
           "product-ids": ["1", "2"],
           "exclude-product-ids": ["1", "2"],
           "discount": 20.0,
           "discount-mode": "percent"
         },
         "relationships":{
           "promo-campaign":{
             "data":{
               "type": "promo-campaigns",
               "id": "2"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type promo-campaign-discounts
URL /api/v1/promo-campaign-discounts
Список GET /api/v1/promo-campaign-discounts
Чтение GET /api/v1/promo-campaign-discounts/{id}
Создание POST /api/v1/promo-campaign-discounts
Редактирование PATCH /api/v1/promo-campaign-discounts/{id}
Удаление DELETE /api/v1/promo-campaign-discounts/{id}

Атрибуты

Атрибуты скидки в промо-компании

{
  "data": {
      "type":"promo-campaign-discounts",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "product-ids": ["1", "2"],
        "exclude-product-ids": ["1", "2"],
        "discount": 20.0,
        "discount-mode": "percent"
      }
   }
}
Имя Тип Пример Запись Описание
product-ids array ["1", "2"] да Идентификаторы продуктов
exclude-product-ids array ["1", "2"] да Идентификаторы продуктов, на которые не действует скидка
discount* float 20.0 да Размер скидки
discount-mode* string percent да Тип скидки: percent (процент) или fixed (фикс. сумма)
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список объектов, созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/promo-campaign-discounts" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/promo-campaign-discounts?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/promo-campaign-discounts?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/promo-campaign-discounts?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/promo-campaign-discounts?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/promo-campaign-discounts?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/promo-campaign-discounts?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести скидки созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести скидки созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести скидки обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести скидки обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Статусы продуктов

Создание статуса продукта

curl "https://app.synergycrm.ru/api/v1/product-statuses" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"product-statuses",
         "attributes":{
           "name":"Статус заявки в API",
           "color":"#000000"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/product-statuses");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"product-statuses\",\"attributes\":{\"name\":\"Статус заявки в API\",\"color\":\"#000000\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/product-statuses')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"product-statuses",
         "attributes":{
           "name":"Статус заявки в API",
           "color":"#000000"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"product-statuses",
         "attributes":{
           "name":"Статус заявки в API",
           "color":"#000000"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/product-statuses", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/product-statuses',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"product-statuses",
         "attributes":{
           "name":"Статус заявки в API",
           "color":"#000000"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/product-statuses"

payload = json.dumps({
       "data":{
         "type":"product-statuses",
         "attributes":{
           "name":"Статус заявки в API",
           "color":"#000000"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/product-statuses'));
  request.body = json.encode({
       "data":{
         "type":"product-statuses",
         "attributes":{
           "name":"Статус заявки в API",
           "color":"#000000"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type product-statuses
URL /api/v1/product-statuses
Список GET /api/v1/product-statuses
Чтение GET /api/v1/product-statuses/{id}
Создание POST /api/v1/product-statuses
Редактирование PATCH /api/v1/product-statuses/{id}
Удаление DELETE /api/v1/product-statuses/{id}

Атрибуты

Атрибуты статуса продукта

{
  "data": {
      "type":"product-statuses",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Мой статус продукта",
        "color": "#1f2f3f"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Мой статус продукта да Имя статуса продукта
color string #1f2f3f да Цвет статуса продукта
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список статусов продуктов созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/product-statuses" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/product-statuses?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/product-statuses?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/product-statuses?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/product-statuses?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/product-statuses?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart


import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/product-statuses?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести статусы продуктов созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести статусы продуктов созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести статусы продуктов обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести статусы продуктов обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Типы продуктов

Создание типа продуктов

curl "https://app.synergycrm.ru/api/v1/product-types" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"product-types",
         "attributes":{
           "name":"Тип продукта в API"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/product-types");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"product-types\",\"attributes\":{\"name\":\"Тип продукта в API\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/product-types')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"product-types",
         "attributes":{
           "name":"Тип продукта в API"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"product-types",
         "attributes":{
           "name":"Тип продукта в API"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/product-types", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/product-types',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"product-types",
         "attributes":{
           "name":"Тип продукта в API"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/product-types"

payload = json.dumps({
       "data":{
         "type":"product-types",
         "attributes":{
           "name":"Тип продукта в API"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/product-types'));
  request.body = json.encode({
       "data":{
         "type":"product-types",
         "attributes":{
           "name":"Тип продукта в API"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type product-types
URL /api/v1/product-types
Список GET /api/v1/product-types
Чтение GET /api/v1/product-types/{id}
Создание POST /api/v1/product-types
Редактирование PATCH /api/v1/product-types/{id}
Удаление DELETE /api/v1/product-types/{id}

Атрибуты

Атрибуты типа продукта

{
  "data": {
      "type":"product-types",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Мой тип продукта"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Мой тип продукта да Название типа продукта
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список единиц измерений продуктов созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/product-types" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/product-types?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/product-types?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/product-types?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/product-types?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/product-types?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/product-types?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести типы продуктов, созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести типы продуктов, созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести типы продуктов, обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести типы продуктов, обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Единицы измерений

Создание новой единицы измерения

curl "https://app.synergycrm.ru/api/v1/product-units" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"product-units",
         "attributes":{
           "name":"Единица измерения в API"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/product-units");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"product-units\",\"attributes\":{\"name\":\"Единица измерения в API\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/product-units')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"product-units",
         "attributes":{
           "name":"Единица измерения в API"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"product-units",
         "attributes":{
           "name":"Единица измерения в API"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/product-units", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/product-units',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"product-units",
         "attributes":{
           "name":"Единица измерения в API"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/product-units"

payload = json.dumps({
       "data":{
         "type":"product-units",
         "attributes":{
           "name":"Единица измерения в API"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/product-units'));
  request.body = json.encode({
       "data":{
         "type":"product-units",
         "attributes":{
           "name":"Единица измерения в API"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type product-units
URL /api/v1/product-units
Список GET /api/v1/product-units
Чтение GET /api/v1/product-units/{id}
Создание POST /api/v1/product-units
Редактирование PATCH /api/v1/product-units/{id}
Удаление DELETE /api/v1/product-units/{id}

Атрибуты

Атрибуты единицы измерения продукта

{
  "data": {
      "type":"product-units",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "руб/м2"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Моя единица измерения да Название единицы измерения
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список единиц измерений продуктов созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/product-units" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/product-units?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/product-units?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/product-units?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/product-units?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/product-units?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/product-units?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести единицы измерения, созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести единицы измерения, созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести единицы измерения, обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести единицы измерения, обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Вложенные продукты

Добавление продукта в сделку (с промокодом)

curl "https://app.synergycrm.ru/api/v1/entity-products" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"entity-products",
         "attributes":{
            "quantity": 2
          },
          "relationships":{
            "entity":{
              "data":{
                "type":"deals",
                "id": 2
              }
            },
            "product":{
              "data":{
                "type":"products",
                "id": 2
              }
            },
            "promocodes":{
              "data":[{
                "type":"promocodes",
                "id": 2
              }]
            }
          }
        }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/entity-products");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"entity-products\",\"attributes\":{\"quantity\": 2},\"relationships\":{\"entity\":{\"data\":{\"type\":\"deals\",\"id\": 2}},\"product\":{\"data\":{\"type\":\"products\",\"id\": 2}},\"promocodes\":{\"data\":[{\"type\":\"promocodes\",\"id\": 2}]}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/entity-products')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"entity-products",
         "attributes":{
            "quantity": 2
          },
          "relationships":{
            "entity":{
              "data":{
                "type":"deals",
                "id": 2
              }
            },
            "product":{
              "data":{
                "type":"products",
                "id": 2
              }
            },
            "promocodes":{
              "data":[{
                "type":"promocodes",
                "id": 2
              }]
            }
          }
        }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"entity-products",
         "attributes":{
            "quantity": 2
          },
          "relationships":{
            "entity":{
              "data":{
                "type":"deals",
                "id": 2
              }
            },
            "product":{
              "data":{
                "type":"products",
                "id": 2
              }
            },
            "promocodes":{
              "data":[{
                "type":"promocodes",
                "id": 2
              }]
            }
          }
        }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/entity-products", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/entity-products',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"entity-products",
         "attributes":{
            "quantity": 2
          },
          "relationships":{
            "entity":{
              "data":{
                "type":"deals",
                "id": 2
              }
            },
            "product":{
              "data":{
                "type":"products",
                "id": 2
              }
            },
            "promocodes":{
              "data":[{
                "type":"promocodes",
                "id": 2
              }]
            }
          }
        }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/entity-products"

payload = json.dumps({
       "data":{
         "type":"entity-products",
         "attributes":{
            "quantity": 2
          },
          "relationships":{
            "entity":{
              "data":{
                "type":"deals",
                "id": 2
              }
            },
            "product":{
              "data":{
                "type":"products",
                "id": 2
              }
            },
            "promocodes":{
              "data":[{
                "type":"promocodes",
                "id": 2
              }]
            }
          }
        }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/entity-products'));
  request.body = json.encode({
       "data":{
         "type":"entity-products",
         "attributes":{
            "quantity": 2
          },
          "relationships":{
            "entity":{
              "data":{
                "type":"deals",
                "id": 2
              }
            },
            "product":{
              "data":{
                "type":"products",
                "id": 2
              }
            },
            "promocodes":{
              "data":[{
                "type":"promocodes",
                "id": 2
              }]
            }
          }
        }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Добавление нескольких вложенных продуктов по связи с продуктами у сделки. Из указанных продуктов будут созданы соответствующие вложенные.

curl "https://app.synergycrm.ru/api/v1/deal/2/relationships/products" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
      {
       "data":[{
         "type":"products",
         "id":"2"
       }, {
         "type":"products",
         "id":"2"
       }]
      }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/deal/2/relationships/products");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":[{\"type\":\"products\",\"id\":\"2\"},{\"type\":\"products\",\"id\":\"2\"}]}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/deal/2/relationships/products')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":[{
         "type":"products",
         "id":"2"
       }, {
         "type":"products",
         "id":"2"
       }]
      }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":[{
         "type":"products",
         "id":"2"
       }, {
         "type":"products",
         "id":"2"
       }]
      }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/deal/2/relationships/products", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deal/2/relationships/products',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":[{
         "type":"products",
         "id":"2"
       }, {
         "type":"products",
         "id":"2"
       }]
      }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/deal/2/relationships/products"

payload = json.dumps({
       "data":[{
         "type":"products",
         "id":"2"
       }, {
         "type":"products",
         "id":"2"
       }]
      })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/deal/2/relationships/products'));
  request.body = json.encode({
       "data":[{
         "type":"products",
         "id":"2"
       }, {
         "type":"products",
         "id":"2"
       }]
      });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Изменение количества продуктов в сделке

curl "https://app.synergycrm.ru/api/v1/entity-products/1/" \
  -X PATCH \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"entity-products",
         "attributes":{
           "quantity":2
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/entity-products/1/");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("PATCH");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"entity-products\",\"attributes\":{\"quantity\":2}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/entity-products/1/')
req = Net::HTTP::Patch.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"entity-products",
         "attributes":{
           "quantity":2
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"entity-products",
         "attributes":{
           "quantity":2
         }
       }
     }`)
	req, err := http.NewRequest("PATCH", "https://app.synergycrm.ru/api/v1/entity-products/1/", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/entity-products/1/',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"entity-products",
         "attributes":{
           "quantity":2
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/entity-products/1/"

payload = json.dumps({
       "data":{
         "type":"entity-products",
         "attributes":{
           "quantity":2
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/entity-products/1/'));
  request.body = json.encode({
       "data":{
         "type":"entity-products",
         "attributes":{
           "quantity":2
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type entity-products
URL /api/v1/entity-products
Список GET /api/v1/entity-products
Чтение GET /api/v1/entity-products/{id}
Создание POST /api/v1/entity-products
Редактирование PATCH /api/v1/entity-products/{id}
Удаление DELETE /api/v1/entity-products/{id}

Связи

Пример данных

{
  "data": {
      "type":"products",
      "id":"2",
      "relationships":{
        "entity":{
          "links":{
            "self":"/api/v1/entity-products/2/relationships/entity",
            "related":"/api/v1/entity-products/2/entity"
          }
        },
        "product":{
          "links":{
            "self":"/api/v1/entity-products/2/relationships/product",
            "related":"/api/v1/entity-products/2/product"
          }
        },
        "product-unit":{
          "links":{
            "self":"/api/v1/entity-products/2/relationships/product-unit",
            "related":"/api/v1/entity-products/2/product-unit"
          }
        }
      }
   }
}

Пример запроса с загруженным объектом

curl "https://app.synergycrm.ru/api/v1/entity-products??filter[entity-id]=11&filter[entity-type]=deals&include=entity" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/entity-products??filter[entity-id]=11&filter[entity-type]=deals&include=entity");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/entity-products??filter[entity-id]=11&filter[entity-type]=deals&include=entity')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/entity-products??filter[entity-id]=11&filter[entity-type]=deals&include=entity", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/entity-products??filter[entity-id]=11&filter[entity-type]=deals&include=entity',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/entity-products??filter[entity-id]=11&filter[entity-type]=deals&include=entity"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/entity-products??filter[entity-id]=11&filter[entity-type]=deals&include=entity'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Единица измерения unit product-units
Объект entity [deals](#deals), [orders](#orders), [contacts](#contacts), [companies](#companies)
Продукт product products

Атрибуты

Атрибуты спецификаций

{
  "data": {
      "type":"entity-products",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Название вложенного продукта",
        "description": null,
        "quantity": 2,
        "purchase-price": "1000.0",
        "total-amount": "2000.0"
      }
   }
}
Имя Тип Пример Запись Описание
name string Мой продукт нет Название продукта
description string Описание моего продукта да Описание продукта
quantity integer 2 да Количество
purchase-price decimal 200.0 да Цена закупочная за один продукт
selling-price decimal 2000.0 да Цена продажи за один продукт
cost-price decimal 1800.0 да Прибыль за один продукт
total-amount decimal 4000.0 нет Конечная цена
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

Фильтры

Получить список вложенных продуктов по определённой сделке

curl -G "https://app.synergycrm.ru/api/v1/entity-products/?filter[entity-id]=2&filter[entity-type]=deals" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Пример на Java

extern crate reqwest;
use reqwest::header;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut headers = header::HeaderMap::new();
    headers.insert("Content-Type", "application/vnd.api+json".parse().unwrap());
    headers.insert("Authorization", "Bearer api_token".parse().unwrap());

    let client = reqwest::blocking::Client::builder()
        .redirect(reqwest::redirect::Policy::none())
        .build()
        .unwrap();
    let res = client.get("https://app.synergycrm.ru/api/v1/entity-products/?filter[entity-id]=2&filter[entity-type]=deals")
        .headers(headers)
        .send()?
        .text()?;
    println!("{}", res);

    Ok(())
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/entity-products/?filter[entity-id]=2&filter[entity-type]=deals')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/entity-products/?filter[entity-id]=2&filter[entity-type]=deals", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/entity-products/?filter[entity-id]=2&filter[entity-type]=deals',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/entity-products/?filter[entity-id]=2&filter[entity-type]=deals"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/entity-products/?filter[entity-id]=2&filter[entity-type]=deals'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
entity-id Вывести спецификации по определенному entity-id filter[entity-id]=2
entity-type Вывести спецификации по определенному entity-type. Допустимые значения: contacts, deals, orders, companies filter[entity-type]=contacts
created-at-gte Вывести спецификации созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести спецификации созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести спецификации обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести спецификации обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00
archived Вывести спецификации в архиве filter[archived]=2
discarded Вывести спецификации в корзине filter[discarded]=2
actual Вывести актуальные спецификации filter[actual]=2

Проекты

Создание проекта

curl "https://app.synergycrm.ru/api/v1/projects" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"projects",
         "attributes":{
           "name":"Проект из API"
         },
         "relationships":{
           "user":{
             "data":{
               "type":"users",
               "id":"22"
             }
           },
           "contact":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/projects");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"projects\",\"attributes\":{\"name\":\"Проект из API\"},\"relationships\":{\"user\":{\"data\":{\"type\":\"users\",\"id\":\"22\"}},\"contact\":{\"data\":{\"type\":\"contacts\",\"id\":\"2\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/projects')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"projects",
         "attributes":{
           "name":"Проект из API"
         },
         "relationships":{
           "user":{
             "data":{
               "type":"users",
               "id":"22"
             }
           },
           "contact":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"projects",
         "attributes":{
           "name":"Проект из API"
         },
         "relationships":{
           "user":{
             "data":{
               "type":"users",
               "id":"22"
             }
           },
           "contact":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/projects", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/projects',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"projects",
         "attributes":{
           "name":"Проект из API"
         },
         "relationships":{
           "user":{
             "data":{
               "type":"users",
               "id":"22"
             }
           },
           "contact":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           }
         }
       }
     }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/projects"

payload = json.dumps({
       "data":{
         "type":"projects",
         "attributes":{
           "name":"Проект из API"
         },
         "relationships":{
           "user":{
             "data":{
               "type":"users",
               "id":"22"
             }
           },
           "contact":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           }
         }
       }
     })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/projects'));
  request.body = json.encode({
       "data":{
         "type":"projects",
         "attributes":{
           "name":"Проект из API"
         },
         "relationships":{
           "user":{
             "data":{
               "type":"users",
               "id":"22"
             }
           },
           "contact":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Пример установки ответственного.

curl "https://app.synergycrm.ru/api/v1/projects/2" \
  -X PATCH \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"projects",
         "id":"2",
         "relationships":{
           "responsible":{
             "data":{
               "type":"users",
               "id":"22"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/projects/2");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("PATCH");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"projects\",\"id\":\"2\",\"relationships\":{\"responsible\":{\"data\":{\"type\":\"users\",\"id\":\"22\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/projects/2')
req = Net::HTTP::Patch.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"projects",
         "id":"2",
         "relationships":{
           "responsible":{
             "data":{
               "type":"users",
               "id":"22"
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"projects",
         "id":"2",
         "relationships":{
           "responsible":{
             "data":{
               "type":"users",
               "id":"22"
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("PATCH", "https://app.synergycrm.ru/api/v1/projects/2", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/projects/2',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"projects",
         "id":"2",
         "relationships":{
           "responsible":{
             "data":{
               "type":"users",
               "id":"22"
             }
           }
         }
       }
     }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/projects/2"

payload = json.dumps({
       "data":{
         "type":"projects",
         "id":"2",
         "relationships":{
           "responsible":{
             "data":{
               "type":"users",
               "id":"22"
             }
           }
         }
       }
     })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/projects/2'));
  request.body = json.encode({
       "data":{
         "type":"projects",
         "id":"2",
         "relationships":{
           "responsible":{
             "data":{
               "type":"users",
               "id":"22"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type projects
URL /api/v1/projects
Список GET /api/v1/projects
Чтение GET /api/v1/projects/{id}
Создание POST /api/v1/projects
Редактирование PATCH /api/v1/projects/{id}
Удаление DELETE /api/v1/projects/{id}

Атрибуты

Атрибуты проекта

{
  "data": {
      "type":"projects",
      "id": 2,
      "attributes":{
        "name": "Проект",
        "start-date": "2022-02-22",
        "end-date": "2022-12-22",
        "discarded-at": null,
        "customs":{
          "custom-943":"2022-02-22T12:22:22.222+03:00"
        },
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Проект да Название проекта
start-date date 2022-02-22 да Дата начала
end-date date 2022-12-22 да Дата окончания
customs hash {"custom-1":'custom value'} да Свои поля
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления
discarded-at datetime 2022-02-22T12:22:22.222+03:00 да Дата перемещения в корзину
previous-responsible-id integer 100 нет Предыдущий ответственный

* Обязательные поля

Связи

Пример данных (перечислены не все связи)

{
  "data": {
    "type":"projects",
    "id":"2",
    "relationships":{
      "order":{
        "links":{
          "self":"/api/v1/projects/2/relationships/order",
          "related":"/api/v1/projects/2/order"
        }
      },
      "task-categories":{
        "links":{
          "self":"/api/v1/projects/2/relationships/task-categories",
          "related":"/api/v1/projects/2/task-categories"
        }
      }
    }
  }
}

Пример запроса с загруженными статусами и категориями проектов

curl "https://app.synergycrm.ru/api/v1/projects?include=user,responsible" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/projects?include=user,responsible");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/projects?include=user,responsible')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/projects?include=user,responsible", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/projects?include=user,responsible',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/projects?include=user,responsible"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/projects?include=user,responsible'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Создатель user users
Категория category project-categories
Контакт contact contacts
Компания company companies
Сделка deal deals
Ответственный responsible users
Группы задач task-categories task-categories
Задачи diaries tasks
Заявка order orders
Связь проект-участник projects-users projects-users
Участники users users

Фильтры

Получить список проектов по определённому контакту

curl -G "https://app.synergycrm.ru/api/v1/projects/?filter[created-at-gte]=2022.02.22 12:00" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/projects/?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/projects/?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/projects/?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/projects/?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/projects/?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/projects/?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
discarded-at-gte Вывести проекты в корзине после указанного времени filter[discarded-at-gte]=2022.02.22 12:00
discarded-at-lte Вывести проекты в корзине до указанного времени filter[discarded-at-lte]=2022.02.22 12:00
created-at-gte Вывести проекты созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести проекты созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести проекты обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести проекты обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00
archived Вывести проекты в архиве filter[archived]=2
discarded Вывести проекты в корзине filter[discarded]=2
actual Вывести актуальные проекты filter[actual]=2
end-date-null Вывести проекты без дедлайна filter[discarded-at-null]=true
discarded-at-null Вывести проекты не в корзине filter[discarded-at-null]=true

Категории проектов

Создание категории проектов

curl "https://app.synergycrm.ru/api/v1/project-categories" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"project-categories",
         "attributes":{
           "name":"Категория проекта из API"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/project-categories");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"project-categories\",\"attributes\":{\"name\":\"Категория проекта из API\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/project-categories')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"project-categories",
         "attributes":{
           "name":"Категория проекта из API"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"project-categories",
         "attributes":{
           "name":"Категория проекта из API"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/project-categories", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/project-categories',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"project-categories",
         "attributes":{
           "name":"Категория проекта из API"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/project-categories"

payload = json.dumps({
       "data":{
         "type":"project-categories",
         "attributes":{
           "name":"Категория проекта из API"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/project-categories'));
  request.body = json.encode({
       "data":{
         "type":"project-categories",
         "attributes":{
           "name":"Категория проекта из API"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type project-categories
URL /api/v1/project-categories
Список GET /api/v1/project-categories
Чтение GET /api/v1/project-categories/{id}
Создание POST /api/v1/project-categories
Редактирование PATCH /api/v1/project-categories/{id}
Удаление DELETE /api/v1/project-categories/{id}

Атрибуты

Атрибуты категорий проекта

{
  "data": {
      "type":"project-categories",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Категория"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Категория да Название категории проекта
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список категорий проектов созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/project-categories" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/project-categories?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/project-categories?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/project-categories?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/project-categories?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/project-categories?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/project-categories?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести категории созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести категории созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести категории обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести категории обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Категории задач проектов

Создание категории задач проектов

curl "https://app.synergycrm.ru/api/v1/task-categories" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"task-categories",
         "attributes":{
           "name":"Категория задач проекта из API"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/task-categories");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"task-categories\",\"attributes\":{\"name\":\"Категория задач проекта из API\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/task-categories')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"task-categories",
         "attributes":{
           "name":"Категория задач проекта из API"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"task-categories",
         "attributes":{
           "name":"Категория задач проекта из API"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/task-categories", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/task-categories',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"task-categories",
         "attributes":{
           "name":"Категория задач проекта из API"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/task-categories"

payload = json.dumps({
       "data":{
         "type":"task-categories",
         "attributes":{
           "name":"Категория задач проекта из API"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/task-categories'));
  request.body = json.encode({
       "data":{
         "type":"task-categories",
         "attributes":{
           "name":"Категория задач проекта из API"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type task-categories
URL /api/v1/task-categories
Список GET /api/v1/task-categories
Чтение GET /api/v1/task-categories/{id}
Создание POST /api/v1/task-categories
Редактирование PATCH /api/v1/task-categories/{id}
Удаление DELETE /api/v1/task-categories/{id}

Атрибуты

Атрибуты категории задач

{
  "data": {
      "type":"task-categories",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Категория"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Категория да Название категории задач проекта
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список категорий задач проектов созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/task-categories" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/task-categories?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/task-categories?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/task-categories?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/task-categories?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/task-categories?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/task-categories?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести категории задач созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести категории задач созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести категории задач обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести категории задач обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Объекты недвижимости

Создание объекта недвижимости с предустановленными статусом

curl "https://app.synergycrm.ru/api/v1/estate-properties" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"estate-properties",
         "attributes":{
           "name":"Объект недвижимости по API",
           "description":"объект созданный при помощи API",
           "purchase-price":20000.0
         },
         "relationships":{
           "status":{
             "data":{
               "type":"estate-property-statuses",
               "id":"2"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/estate-properties");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"estate-properties\",\"attributes\":{\"name\":\"Объект недвижимости по API\",\"description\":\"объект созданный при помощи API\",\"purchase-price\":20000.0},\"relationships\":{\"status\":{\"data\":{\"type\":\"estate-property-statuses\",\"id\":\"2\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/estate-properties')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{       
  "data":{         
    "type":"estate-properties",         
    "attributes":{           
      "name":"Объект недвижимости по API",           
      "description":"объект созданный при помощи API",           
      "purchase-price":20000.0         
      },         
      "relationships":{           
        "status":{             
          "data":{               "type":"estate-property-statuses",               "id":"2"             
          }           
        }         
      }       
    }     
  }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{       
  "data":{         
    "type":"estate-properties",         
    "attributes":{           
      "name":"Объект недвижимости по API",           
      "description":"объект созданный при помощи API",           
      "purchase-price":20000.0         
      },         
      "relationships":{           
        "status":{             
          "data":{               "type":"estate-property-statuses",               "id":"2"             
          }           
        }         
      }       
    }     
  }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/estate-properties", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/estate-properties',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"estate-properties",
         "attributes":{
           "name":"Объект недвижимости по API",
           "description":"объект созданный при помощи API",
           "purchase-price":20000.0
         },
         "relationships":{
           "status":{
             "data":{
               "type":"estate-property-statuses",
               "id":"2"
             }
           }
         }
       }
     }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/estate-properties"

payload = json.dumps({
       "data":{
         "type":"estate-properties",
         "attributes":{
           "name":"Объект недвижимости по API",
           "description":"объект созданный при помощи API",
           "purchase-price":20000.0
         },
         "relationships":{
           "status":{
             "data":{
               "type":"estate-property-statuses",
               "id":"2"
             }
           }
         }
       }
     })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/estate-properties'));
  request.body = json.encode({
       "data":{
         "type":"estate-properties",
         "attributes":{
           "name":"Объект недвижимости по API",
           "description":"объект созданный при помощи API",
           "purchase-price":20000.0
         },
         "relationships":{
           "status":{
             "data":{
               "type":"estate-property-statuses",
               "id":"2"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Пример установки обложки.

curl "https://app.synergycrm.ru/api/v1/estate-properties/22" \
  -X PATCH \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"estate-properties",
         "id":"22",
         "relationships":{
           "cover":{
             "data":{
               "type":"documents",
               "id":"222"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/estate-properties/22");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("PATCH");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"estate-properties\",\"id\":\"22\",\"relationships\":{\"cover\":{\"data\":{\"type\":\"documents\",\"id\":\"222\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/estate-properties/22')
req = Net::HTTP::Patch.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{       
  "data":{         
    "type":"estate-properties",         
    "id":"22",         
    "relationships":{           
      "cover":{             
        "data":{               
          "type":"documents",               
          "id":"222"             
          }           
        }         
      }       
    }     
  }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{       
  "data":{         
    "type":"estate-properties",         
    "id":"22",         
    "relationships":{           
      "cover":{             
        "data":{               
          "type":"documents",               
          "id":"222"             
          }           
        }         
      }       
    }     
  }`)
	req, err := http.NewRequest("PATCH", "https://app.synergycrm.ru/api/v1/estate-properties/22", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/estate-properties/22',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{       
  "data":{         
    "type":"estate-properties",         
    "id":"22",         
    "relationships":{           
      "cover":{             
        "data":{               
          "type":"documents",               
          "id":"222"             
          }           
        }         
      }       
    }     
  }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/estate-properties/22"

payload = json.dumps({       
  "data":{         
    "type":"estate-properties",         
    "id":"22",         
    "relationships":{           
      "cover":{             
        "data":{               
          "type":"documents",               
          "id":"222"             
          }           
        }         
      }       
    }     
  })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/estate-properties/22'));
  request.body = json.encode({       
  "data":{         
    "type":"estate-properties",         
    "id":"22",         
    "relationships":{           
      "cover":{             
        "data":{               
          "type":"documents",               
          "id":"222"             
          }           
        }         
      }       
    }     
  });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type estate-properties
URL /api/v1/estate-properties
Список GET /api/v1/estate-properties
Чтение GET /api/v1/estate-properties/{id}
Создание POST /api/v1/estate-properties
Редактирование PATCH /api/v1/estate-properties/{id}
Удаление DELETE /api/v1/estate-properties/{id}

Атрибуты

Атрибуты объекта недвижимости

{
  "data": {
      "type":"estate-properties",
      "id": 2,
      "attributes":{
        "created-at": "2022-02-22T12:02:22.222+03:00",
        "updated-at": "2022-02-22T12:02:22.222+03:00",
        "cached-at": "2022-02-22T12:02:22.222+03:00",
        "name": "Мой объект недвижимости",
        "cover-image": "https://example.com/path/to/file.jpg",
        "description": "отличное состояние",
        "archived-at": "2022-02-22T12:02:22.222+03:00",
        "purchase-price": "20000.0",
        "map-url": "http://app.synergycrm.ru",
        "railway": "Станция 1",
        "cadastral-num": "222222",
        "highway-name": "Шоссейное",
        "subway-name": "Метро 1",
        "address": "Ленинский 15",
        "country": "Россия",
        "region": "Москва",
        "locality": "Москва",
        "district": "Алтуфьевский",
        "building-name": "ЖК Чистоста и порядок",
        "build-at": 2005,
        "city-dist": 10,
        "subway-dist": 1,
        "subway-transport": 5,
        "subway-foot": 20,
        "room-number": 100,
        "total-room": 3,
        "separate-rooms": 3,
        "rooms-for-sell": 3,
        "floor-number": 5,
        "total-floors": 9,
        "deal-type": null,
        "object-type": "flat_and_room:flat",
        "installments": "no",
        "bargain": "yes",
        "mortgage": "no",
        "deal-category": "sell",
        "balcony": "loggia",
        "building-class": "aplus",
        "building-type": "administrative",
        "business-usage-type": "any",
        "commission-type": "percent",
        "condition": "normal",
        "climate": "heating",
        "currency": "rur",
        "feature": "['pool', 'wireless_internet', 'billiards', 'boiler', 'concierge]",
        "electricity": "yes",
        "flat-status": "free",
        "flat-type": "elite",
        "gas": "no",
        "gate": "drive_a_truck",
        "heating": "central",
        "highway-access": "direct_access",
        "land-usage-type": "igs",
        "layout": "free",
        "material": "concrete",
        "new-flat": "yes",
        "ownership": "agent",
        "parking-type": "on_ground",
        "rent-period": "long",
        "plumbing": "central",
        "payment-period": "month",
        "land-purpose": "settlements",
        "ready-quarter": "II",
        "relief": "flat",
        "renovation": "good",
        "sewerage": "central",
        "storage-type": "Напольное",
        "toilet": "joined",
        "warehouse-floor": "Бетонный пол",
        "warehouse-type": "Склад",
        "location-type": "town",
        "object-category": "flat_and_room",
        "window-view": "street",
        "encumbrance": "yes",
        "build-stage": "done_not_passed",
        "ceiling-height": 2.2,
        "longitude": 22.222222,
        "latitude": 22.222222,
        "land-area": null,
        "total-area": 69,
        "living-area": 60,
        "kitchen-area": 20,
        "commission-sum": "10.0",
        "contact-phone": "79876543211",
        "uid": "5efc566c803eea8beaab850e5c779eb6",
        "rent-deposit": "without",
        "address-coordinates": {
          "latitude": 55.78,
          "longitude": 37.64
        },
        "customs": {
            "custom-11801": "Кастомное значение"
        }
      }
   }
}
Имя Тип Пример Запись Описание
address string Ленинский 15 Да Адрес
address-coordinates json {"latitude": 55.78, "longitude": 37.64} да Координаты адреса: долгота и широта
archived-at datetime 2022-02-22T12:02:22.222+03:00 Нет Помещено в архив
balcony string balcony Да Балкон
bargain string yes Да Торг
build-at integer 2022 Да Год постройки
build-stage string passed Да Стадия строительства
building-class string aplus Да Класс здания
building-name string ООО Управляющая компания Да Название ЖК
building-type string living_house Да Тип здания
business-usage-type string any Да Тип использования коммерческого помещения
cached-at datetime 2022-02-22T12:02:22.222+03:00 Нет Закэшировано
cadastral-num string 22:22:222222:222 Да Кадастровый номер
ceiling-height decimal 2.2 Да Высота потолков
city-dist integer 10 Да Расстояние до города, км
climate string heating Да Система контроля климата
commission-sum decimal 10.0 Да Комиссия
commission-type string percent Да Тип комиссии
condition string normal Да Состояние коммерческого помещения
contact-phone string 79876543211 Да Контактный телефон
country string Россия Да Страна
cover-image string https://example.com/path/to/file.jpg нет Обложка.**
created-at datetime 2022-02-22T12:02:22.222+03:00 да Дата создания
currency string rur Да Валюта
customs hash {"custom-1":'custom value'} да Свои поля
deal-category string sell Да Категория сделки
deal-type string sell:direct Да Тип сделки
description string Хорошая квартира... Да Описание
discarded-at datetime 2022-02-22T12:02:22.222+03:00 да Дата перемещения в корзину
district string Автозаводский Да Район
electricity string yes Да Электроснабжение
encumbrance string yes Да Обременение
feature text ['pool', 'wireless_internet', 'billiards', 'boiler', 'concierge] Да Опции
flat-status string free Да Статус квартиры
flat-type string elite Да Тип квартиры
floor-number integer 2 Да Этаж
gas string possible Да Газификация
gate string hyudralic_ramps Да Въезд
heating string central Да Отопление
highway-access string direct_access Да Транспортная доступность
highway-name string Шоссейное Да Шоссе
installments string no Да Рассрочка
kitchen-area decimal 20.0 Да Кухня, м. кв.
land-area decimal 0.0 Да Площадь участка, соток
land-purpose string settlements Да Использование земли
land-usage-type string igs Да Назначение земли
latitude decimal 22.222222 Да Широта
layout string free Да Планировка
living-area decimal 222 Да Жилая площадь, м. кв.
locality string Москва Да Населенный пункт
location-type string town Да Расположение
longitude decimal 22.222222 Да Долгота
map-url string https://url_to_map Да Ссылка на карту
material string panel Да Материал стен
mortgage string no Да Ипотека
name string Мой объект недвижимости Да Название
new-flat string yes Да Новостройка
object-category string flat_and_room Да Категория объекта
object-type string foreign_estate:apartments Да Тип объекта
ownership string owner Да Собственность
parking-type string on_ground Да Тип парковки
payment-period string month Да Период оплаты
plumbing string hole Да Водоснабжение
purchase-price decimal 20000000 Да Цена
railway string Красная Да Ж/д станция
ready-quarter string III Да Квартал сдачи дома
region string Московская область Да Регион
relief string flat Да Рельеф
renovation string good Да Ремонт
rent-deposit string two_month Да Залог для аренды
rent-period string long Да Срок аренды
room-number integer 22 Да Квартира
rooms-for-sell integer 2 Да Комнат продается
separate-rooms integer 2 Да Комнат раздельно
sewerage string Центральная Да Канализация
storage-type string Напольное Да Тип хранения
subway-dist integer 2 Да Расстояние до метро, м.
subway-foot integer 2 Да До метро пешком, мин.
subway-name string Станция "тест" Да Метро
subway-transport integer 2 Да До метро на транспорте, мин.
toilet string Совмещенный Да Туалет
total-area decimal 222 Да Общая площадь, м. кв.
total-floors integer 22 Да Этажей в доме
total-room integer 2 Да Комнат всего
updated-at datetime 2022-02-22T12:02:22.222+03:00 нет Обновлено
warehouse-floor string Бетонный пол Да Покрытие полов
warehouse-type string Склад Да Тип складского помещения
window-view string Во двор Да Вид из окна
previous-responsible-id integer 100 нет Предыдущий ответственный

Справочник атрибутов объектов недвижимости

* Обязательные поля

** Обложка может быть установлена только из тех документов, которые уже связаны с продуктом и являются изображением.

Связи

Пример данных (перечислены не все связи)

{
  "data": {
    "type":"estate-properties",
    "id":"2",
    "relationships":{
      "status":{
        "links":{
          "self":"/api/v1/estate-properties/2/relationships/status",
          "related":"/api/v1/estate-properties/2/status"
        }
      }
    }
  }
}

Пример запроса с загруженными статусами

curl "https://app.synergycrm.ru/api/v1/estate-properties?include=status" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/estate-properties?include=status");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/estate-properties')
params = {
  :include => 'status',
}
uri.query = URI.encode_www_form(params)

req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/estate-properties?include=status", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/estate-properties?include=status',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/estate-properties?include=status"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/estate-properties?include=status'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Статус status product-statuses
Источник source sources
Задачи diaries diaries
Заявки orders orders
Сделки deals deals
Изображения images documents
Обложка cover documents
Документы documents documents
Ответственный responsible users
Продавец* company companies
Продавец* contact contacts
Соисполнители performers users

* Одновременно указывать контакт и компанию продавцом нельзя, к объекту будет привязан только один объект

Фильтры

Получить список объектов недвижимости созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/estate-properties" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/estate-properties?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/estate-properties?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/estate-properties?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/estate-properties?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/estate-properties?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/estate-properties?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести объекты недвижимости созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести объекты недвижимости созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести объекты недвижимости обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести объекты недвижимости обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00
discarded-at-null Вывести объекты недвижимости не в корзине filter[discarded-at-null]=true
archived Вывести объекты недвижимости в архиве filter[archived]=2
discarded Вывести объекты недвижимости в корзине filter[discarded]=2
actual Вывести актуальные объекты недвижимости filter[actual]=2

Статусы

Создание статуса объекта недвижимости

curl "https://app.synergycrm.ru/api/v1/estate-property-statuses" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"estate-property-statuses",
         "attributes":{
           "name":"Статус объекта недвижимости в API",
           "color":"#d2d2d2"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/estate-property-statuses");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"estate-property-statuses\",\"attributes\":{\"name\":\"Статус объекта недвижимости в API\",\"color\":\"#d2d2d2\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/estate-property-statuses')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"estate-property-statuses",
         "attributes":{
           "name":"Статус объекта недвижимости в API",
           "color":"#d2d2d2"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"estate-property-statuses",
         "attributes":{
           "name":"Статус объекта недвижимости в API",
           "color":"#d2d2d2"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/estate-property-statuses", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/estate-property-statuses',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"estate-property-statuses",
         "attributes":{
           "name":"Статус объекта недвижимости в API",
           "color":"#d2d2d2"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/estate-property-statuses"

payload = json.dumps({
       "data":{
         "type":"estate-property-statuses",
         "attributes":{
           "name":"Статус объекта недвижимости в API",
           "color":"#d2d2d2"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/estate-property-statuses'));
  request.body = json.encode({
       "data":{
         "type":"estate-property-statuses",
         "attributes":{
           "name":"Статус объекта недвижимости в API",
           "color":"#d2d2d2"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type estate-property-statuses
URL /api/v1/estate-property-statuses
Список GET /api/v1/estate-property-statuses
Чтение GET /api/v1/estate-property-statuses/{id}
Создание POST /api/v1/estate-property-statuses
Редактирование PATCH /api/v1/estate-property-statuses/{id}
Удаление DELETE /api/v1/estate-property-statuses/{id}

Атрибуты

Атрибуты статуса объекта недвижимости

{
  "data": {
      "type":"estate-property-statuses",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Мой статус объекта недвижимости",
        "color": "#1f2f3f"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Мой статус объекта недвижимости да Имя статуса объекта недвижимости
color string #1f2f3f да Цвет статуса объекта недвижимости
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список статусов объектов недвижимости созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/estate-property-statuses" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/estate-property-statuses?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/estate-property-statuses?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/estate-property-statuses?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/estate-property-statuses?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/estate-property-statuses?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/estate-property-statuses?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести объекты недвижимости созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести объекты недвижимости созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести объекты недвижимости обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести объекты недвижимости обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Договоры

Создание договора с предустановленными сторонами

curl "https://app.synergycrm.ru/api/v1/contracts" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"contracts",
         "attributes":{
           "name":"Трудовой договор",
           "date":"2022-02-22"
         },
         "relationships":{
           "first-party":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           },
           "second-party":{
             "data":{
               "type":"companies",
               "id":"2"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/contracts");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"contracts\",\"attributes\":{\"name\":\"Трудовой договор\",\"date\":\"2022-02-22\"},\"relationships\":{\"first-party\":{\"data\":{\"type\":\"contacts\",\"id\":\"2\"}},\"second-party\":{\"data\":{\"type\":\"companies\",\"id\":\"2\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/contracts')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"contracts",
         "attributes":{
           "name":"Трудовой договор",
           "date":"2022-02-22"
         },
         "relationships":{
           "first-party":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           },
           "second-party":{
             "data":{
               "type":"companies",
               "id":"2"
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"contracts",
         "attributes":{
           "name":"Трудовой договор",
           "date":"2022-02-22"
         },
         "relationships":{
           "first-party":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           },
           "second-party":{
             "data":{
               "type":"companies",
               "id":"2"
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/contracts", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contracts',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"contracts",
         "attributes":{
           "name":"Трудовой договор",
           "date":"2022-02-22"
         },
         "relationships":{
           "first-party":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           },
           "second-party":{
             "data":{
               "type":"companies",
               "id":"2"
             }
           }
         }
       }
     }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/contracts"

payload = json.dumps({
       "data":{
         "type":"contracts",
         "attributes":{
           "name":"Трудовой договор",
           "date":"2022-02-22"
         },
         "relationships":{
           "first-party":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           },
           "second-party":{
             "data":{
               "type":"companies",
               "id":"2"
             }
           }
         }
       }
     })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/contracts'));
  request.body = json.encode({
       "data":{
         "type":"contracts",
         "attributes":{
           "name":"Трудовой договор",
           "date":"2022-02-22"
         },
         "relationships":{
           "first-party":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           },
           "second-party":{
             "data":{
               "type":"companies",
               "id":"2"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type contracts
URL /api/v1/contracts
Список GET /api/v1/contracts
Чтение GET /api/v1/contracts/{id}
Создание POST /api/v1/contracts
Редактирование PATCH /api/v1/contracts/{id}
Удаление DELETE /api/v1/contracts/{id}

Атрибуты

Ниже приведен пример формата данных, в реальном ответе будут присутствовать все перечисленные атрибуты

{
  "data": {
      "type":"contracts",
      "id":"2",
      "attributes":{
        "created-at": "2022-02-22T12:02:22.222+03:00",
        "updated-at": "2022-02-22T12:02:22.222+03:00",
        "cached-at": "2022-02-22T12:02:22.222+03:00",
        "name": "Трудовой договор",
        "number": 22,
        "custom-number": "abc-22",
        "date": "2022-02-22",
        "archived-at": null,
        "customs":{
          "custom-1":"Значение",
          "custom-943":"2022-02-22T12:02:22.222+03:00"
        },
        "archived-at":null
      }
   }
}

Основные атрибуты

Имя Тип Пример Запись Описание
name string Трудовой договор да Название договора
number integer 22 да Номер договора
custom_number string abc-22 да № ручн.
date datetime 2022-02-22 да Дата договора
custom hash {"custom-1":'custom value'} да Свои поля
archived-at datetime 2022-02-22T12:02:22.222+03:00 да Дата архивации
previous-responsible-id integer 100 нет Предыдущий ответственный

Связи

Пример данных (перечислены не все связи)

{
  "data": {
      "type":"contracts",
      "id":"2",
      "relationships": {
        "first-party": {
          "links": {
            "self": "http://localhost:3000/api/v1/contracts/2/relationships/first-party",
            "related": "http://localhost:3000/api/v1/contracts/2/first-party"
          }
        },
        "second-party": {
          "links": {
            "self": "http://localhost:3000/api/v1/contracts/2/relationships/second-party",
            "related": "http://localhost:3000/api/v1/contracts/2/second-party"
          }
        }
      }
   }
}

Пример запроса с загруженными компаниями и заявками договора

curl "https://app.synergycrm.ru/api/v1/contracts?include=companies,orders" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/contracts?include=companies,orders");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/contracts?include=companies,orders')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/contracts?include=companies,orders", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contracts?include=companies,orders',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/contracts?include=companies,orders"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/contracts?include=companies,orders'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Сторона 1 first-party companies, contacts
Сторона 2 second-party companies, contacts
Создатель user users
Соисполнители performers users
Компании companies companies
Контакты contacts contacts
Сделки deals deals
Заявки orders orders
Объекты недвижимости estate-properties estate-properties

Фильтры

Получить список договоров с определённым номером

curl -G "https://app.synergycrm.ru/api/v1/contracts" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/contracts?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/contracts?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/contracts?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contracts?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/contracts?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/contracts?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести договоры созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести договоры созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести договоры обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести договоры обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00
discarded-at-gte Вывести договоры в корзине после указанного времени filter[discarded-at-gte]=2022.02.22 12:00
discarded-at-lte Вывести договоры в корзине до указанного времени filter[discarded-at-lte]=2022.02.22 12:00
table-state-id Вывести договоры по заданному табличному фильтру filter[table-state-id]=2
q Вывести договоры по поисковому запросу filter[q]=some-query
archived Вывести договоры в архиве filter[archived]=2
discarded Вывести договоры в корзине filter[discarded]=2
actual Вывести актуальные договоры filter[actual]=2

Сегменты

Создание нового сегмента с привязанными сделками

curl "https://app.synergycrm.ru/api/v1/segments" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"segments",
         "attributes":{
           "name":"Сегмент из API"
         },
         "relationships":{
           "deals":{
             "data":[{
               "type":"deals",
               "id":"1"
             },{
               "type":"deals",
               "id":"2"
             }]
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/segments");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"segments\",\"attributes\":{\"name\":\"Сегмент из API\"},\"relationships\":{\"deals\":{\"data\":[{\"type\":\"deals\",\"id\":\"1\"},{\"type\":\"deals\",\"id\":\"2\"}]}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/segments')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"segments",
         "attributes":{
           "name":"Сегмент из API"
         },
         "relationships":{
           "deals":{
             "data":[{
               "type":"deals",
               "id":"1"
             },{
               "type":"deals",
               "id":"2"
             }]
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"segments",
         "attributes":{
           "name":"Сегмент из API"
         },
         "relationships":{
           "deals":{
             "data":[{
               "type":"deals",
               "id":"1"
             },{
               "type":"deals",
               "id":"2"
             }]
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/segments", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/segments',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"segments",
         "attributes":{
           "name":"Сегмент из API"
         },
         "relationships":{
           "deals":{
             "data":[{
               "type":"deals",
               "id":"1"
             },{
               "type":"deals",
               "id":"2"
             }]
           }
         }
       }
     }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/segments"

payload = json.dumps({
       "data":{
         "type":"segments",
         "attributes":{
           "name":"Сегмент из API"
         },
         "relationships":{
           "deals":{
             "data":[{
               "type":"deals",
               "id":"1"
             },{
               "type":"deals",
               "id":"2"
             }]
           }
         }
       }
     })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/segments'));
  request.body = json.encode({
       "data":{
         "type":"segments",
         "attributes":{
           "name":"Сегмент из API"
         },
         "relationships":{
           "deals":{
             "data":[{
               "type":"deals",
               "id":"1"
             },{
               "type":"deals",
               "id":"2"
             }]
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type segments
URL /api/v1/segments
Список GET /api/v1/segments
Чтение GET /api/v1/segments/{id}
Создание POST /api/v1/segments
Редактирование PATCH /api/v1/segments/{id}
Удаление DELETE /api/v1/segments/{id}

Атрибуты

Атрибуты сегмента

{
  "data": {
      "type":"segments",
      "id":"1",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Сегмент из API",
        "due-date": "2022-02-22",
        "active": true,
        "customs":{
          "custom-1":"Значение",
          "custom-943":"2022-02-22T12:22:22.222+03:00"
        }
      }
   }
}
Имя Тип Пример Запись Описание
name* string Сегмент из API да Имя сегмента
due-date date 2022-02-22 да Срок действия
active boolean true да Активность
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список источников созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/segments" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/segments?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/segments?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/segments?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/segments?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/segments?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/segments?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
name Вывести источники с указанным именем filter[name]=Сайт
created-at-gte Вывести сегменты созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести сегменты созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести сегменты обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести сегменты обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Связи

Пример данных (перечислены не все связи)

{
    "data": {
        "id": "2",
        "type": "segments",
        "links": {
            "self": "http://app.synergycrm.ru/api/v1/segments/1"
        },
        "relationships": {
            "company": {
                "links": {
                    "self": "http://app.synergycrm.ru/api/v1/segments/1/relationships/company",
                    "related": "http://app.synergycrm.ru/api/v1/segments/1/company"
                }
            },
            "contact": {
                "links": {
                    "self": "http://app.synergycrm.ru/api/v1/segments/1/relationships/contact",
                    "related": "http://app.synergycrm.ru/api/v1/segments/1/contact"
                }
            }
        }
    }
}

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Создатель user users
Соисполнители performers users
Компания company companies
Контакт contact contacts
Сделки deals deals
Задачи diaries diaries

Счета и платежи

Пример данных для создания счета с позициями. Обязательно необходимо указать плательщика payer

{
    "data":{
      "type":"invoices",
      "attributes":{
        "positions":[
          {
            "product-id":22222,
            "quantity":2,
            "amount":222
          },
          {
            "product-id":22222,
            "quantity":1
          }]
      },
      "relationships":{
        "payer":{
          "data":{
            "type":"companies",
            "id":222222
          }
        }
      }
    }
  }
JSON API type invoices
URL /api/v1/invoices
Список GET /api/v1/invoices
Чтение GET /api/v1/invoices/{id}
Создание POST /api/v1/invoices
Редактирование PATCH /api/v1/invoices/{id}
Удаление DELETE /api/v1/invoices/{id}

Атрибуты

Атрибуты счета

{
  "data": {
      "type":"invoices",
      "id": 2,
      "attributes":{
        "number": 2222,
        "custom-number": 2222,
        "amount": "2222.0",
        "due-date": "2022-02-22T12:02:22.222+03:00",
        "vat-kind": "without",
        "vat-rate": 10,
        "reason": "л/с 22222",
        "issued-at": "2022-02-22T12:02:22.222+03:00",
        "vi-date": "2022-02-22T12:02:22.222+03:00",
        "torg-12-date": "2022-02-22T12:02:22.222+03:00",
        "upd-date": "2022-02-22T12:02:22.222+03:00",
        "act-date": "2022-02-22T12:02:22.222+03:00",
        "shipping-date": "2022-02-22T12:02:22.222+03:00",
        "status": "not_paid",
        "balance": "2222.0",
        "available_without_signature": true,
        "created-at": "2022-02-22T12:02:22.222+03:00",
        "updated-at": "2022-02-22T12:02:22.222+03:00"
      }
   }
}
Имя Тип Пример Запись Описание
positions array [{"product-id":41922}] да Позиции счета
number integer 222 да Номер автоматический
custom-number string мм.222.пп да Номер ручной
amount decimal 2222.0 да Сумма счета
vat-kind string without да Тип НДС
vat-rate integer 10 да Значение НДС (%)
due-date datetime 2022-02-22T12:02:22.222+03:00 да Срок оплаты
issued-at datetime 2022-02-22T12:02:22.222+03:00 да Дата проведения счета
vi-date date 2022-02-22 да Дата СФ
torg-12-date date 2022-02-22 да Дата ТОРГ-12
upd-date date 2022-02-22 да Дата УПД
act-date date 2022-02-22 да Дата акта
shipping-date date 2022-02-22 да Дата отгрузки
reason string л/с 22222 да Основание
torg_12_reason string Договор № 2 да Основание для ТОРГ-12
act_reason string Договор № 2 да Основание для акта вып. работ
status string not_paid нет Статус
balance decimal 2222222.0 нет Неоплаченный остаток по счету
available_without_signature boolean true да Отметка о том, имеет ли документ юридическую силу без подписи
show-discount boolean true да Показывать скидку в печатной форме
show-vendor-code boolean true да Показывать артикул в печатной форме
with-stamp boolean true да Подставить печать и подпись в печатную форму
payment-type string non_cash да Тип платежа. Достустимые значения cash и non_cash
customs hash {"custom-1":'custom value'} да Свои поля
previous-responsible-id integer 100 нет Предыдущий ответственный

Позиции

Допустимые поля для значений массива JSON-объектов атрибута positions.

Поле Тип Описание
name* string Переопределенное наименование товара
product_id* integer ID продукта
quantity integer Количество товара
amount decimal Сумма позиции
is-service boolean Товар (false) или услуга (true)
unit string Единица измерения
code code Код товара

* Обязательные поля

Типы НДС

Допустимые значения для атрибута vat-kind.

Тип НДС Код
Без НДС without
НДС сверху top
НДС включен include
НДС позиций positions

Статусы счетов

Допустимые значения для атрибута status. Значение поля рассчитывается автоматически на основе платежей и даты окончания, и редактированию не подлежит.

Статус Код
Частично оплачен partial
Частично оплачен с просрочкой partial_overdue
Просрочен overdue
Не оплачен not_paid
Полностью оплачен paid
Без позиций without_positions
Отменен cancelled

Связи

Название Связь JSON API type
Плательщик* payer companies, contacts
Создатель user users
Сделка deal deals
Заявка order orders
Продукты products products
Позиции positions invoice-positions
Платежи payments invoice-payments
Получатель org-detail org-details
Банк. реквизиты account-bank-detail account-bank-details
Банк. реквизиты компании company-bank-detail company-bank-details

* Обязательная связь

Фильтры

Получить список счетов созданных после указанной даты

curl -G "https://app.synergycrm.ru/api/v1/invoices/?filter[created-at-gte]=2022.02.22 12:00" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/invoices/?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/invoices/?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/invoices/?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/invoices/?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/invoices/?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/invoices/?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести счета созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести счета созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести счета обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести счета обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00
table-state-id Вывести счета по заданному табличному фильтру filter[table-state-id]=2
q Вывести счета по поисковому запросу filter[q]=some-query
unpaid Вывести неоплаченные счета filter[unpaid]=2
archived Вывести счета в архиве filter[archived]=2
discarded Вывести счета в корзине filter[discarded]=2
actual Вывести актуальные счета filter[actual]=2

Банковские реквизиты

Создание банковских реквизитов

curl "https://app.synergycrm.ru/api/v1/account-bank-details" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"account-bank-details",
         "attributes":{
           "name":"test",
           "kind":"calculated_invoice"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/account-bank-details");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"account-bank-details\",\"attributes\":{\"name\":\"test\",\"kind\":\"calculated_invoice\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/account-bank-details')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"account-bank-details",
         "attributes":{
           "name":"test",
           "kind":"calculated_invoice"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"account-bank-details",
         "attributes":{
           "name":"test",
           "kind":"calculated_invoice"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/account-bank-details", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/account-bank-details',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"account-bank-details",
         "attributes":{
           "name":"test",
           "kind":"calculated_invoice"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/account-bank-details"

payload = json.dumps({
       "data":{
         "type":"account-bank-details",
         "attributes":{
           "name":"test",
           "kind":"calculated_invoice"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/account-bank-details'));
  request.body = json.encode({
       "data":{
         "type":"account-bank-details",
         "attributes":{
           "name":"test",
           "kind":"calculated_invoice"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type account-bank-details
URL /api/v1/account-bank-details
Список GET /api/v1/account-bank-details
Чтение GET /api/v1/account-bank-details/{id}
Создание POST /api/v1/account-bank-details
Редактирование PATCH /api/v1/account-bank-details/{id}
Удаление DELETE /api/v1/account-bank-details/{id}

Атрибуты

Атрибуты банковских реквизитов организации

{
  "data":{
      "id": "2",
      "type": "account-bank-details",
      "attributes":{
          "created-at": "2022-02-22T12:22:22.222+03:00",
          "updated-at": "2022-02-22T12:22:22.222+03:00",
          "name": "МОЕ НАЗВАНИЕ БАНКОВСКИХ РЕКВИЗИТОВ",
          "bank-name": "ПАО СБЕРБАНК",
          "bik": "000000000",
          "corr-number": "00000000000000000000",
          "number": "00000000000000000000",
          "is-default": true,
          "active": true,
          "kind": "calculated_invoice"
      }
  }
}
Имя Тип Пример Запись Описание
name* string МОЕ НАЗВАНИЕ БАНКОВСКИХ РЕКВИЗИТОВ да Название набора реквизитов
kind* string cashbox да Тип реквизитов (cashbox - касса, calculated_invoice - р/счет)
bank-name string ПАО СБЕРБАНК да Имя банка
bik string 000000000 да БИК банка
corr-number string 00000000000000000000 да Корр. счет
number string 00000000000000000000 да Номер счета
is-default boolean true да Основные реквизиты?
active boolean true да Активность счета
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры банковских реквизитов

Получить список банковских реквизитов, созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/account-bank-details" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/account-bank-details?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/account-bank-details?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/account-bank-details?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/account-bank-details?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/account-bank-details?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/account-bank-details?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести банковские реквизиты созданные в системе после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести банковские реквизиты созданные в системе до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести банковские реквизиты обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести банковские реквизиты обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00
number Вывести банковские реквизиты по номеру счета filter[number]=01010101010101010101
bik Вывести банковские реквизиты по БИК банка filter[bik]=010101010

Юридические лица аккаунта

Создание юридических лиц

curl "https://app.synergycrm.ru/api/v1/org-details" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"org-details",
         "attributes":{
           "short-name":"test"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/org-details");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"org-details\",\"attributes\":{\"short-name\":\"test\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/org-details')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"org-details",
         "attributes":{
           "short-name":"test"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"org-details",
         "attributes":{
           "short-name":"test"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/org-details", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/org-details',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"org-details",
         "attributes":{
           "short-name":"test"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/org-details"

payload = json.dumps({
       "data":{
         "type":"org-details",
         "attributes":{
           "short-name":"test"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/org-details'));
  request.body = json.encode({
       "data":{
         "type":"org-details",
         "attributes":{
           "short-name":"test"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type org-details
URL /api/v1/org-details
Список GET /api/v1/org-details
Чтение GET /api/v1/org-details/{id}
Создание POST /api/v1/org-details
Редактирование PATCH /api/v1/org-details/{id}
Удаление DELETE /api/v1/org-details/{id}

Атрибуты

Атрибуты организации

{
  "data":{
      "id": "1",
      "type": "org-details",
      "attributes":{
          "created-at": "2022-02-22T12:22:22.222+03:00",
          "updated-at": "2022-02-22T12:22:22.222+03:00",
          "short-name": "ООО Синергия Софт",
          "full-name": "Общество с ограниченной ответственность Синергия Софт",
          "website": "comany-site.com"
      }
  }
}
Имя Тип Пример Запись Описание
short-name* string ООО Синергия Софт да Сокращенное название
full-name string Общество с ограниченной ответственность Синергия Софт да Название полное
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления
website string comany-site.com да Вебсайт компании

* Обязательные поля

Позиции счета

Пример данных для создания позиции счета. Обязательно необходимо указать счет invoice, связь с product является опциональной, если он не будет передан, то необходимо, чтобы были педераны атрибуты invoice-position, такие как: name*, quantity, amount, code, is-service, unit, discount

{
    "data":{
      "type":"invoice-positions",
      "attributes":{
        "quantity":2,
        "amount":222.2,
        "discount":20
      },
      "relationships":{
        "product":{
          "data":{
            "type":"products",
            "id":2
          }
        },
        "invoice":{
          "data":{
            "type":"invoices",
            "id":222
          }
        }
      }
    }
  }
JSON API type invoice-positions
URL /api/v1/invoice-positions
Список GET /api/v1/invoice-positions
Чтение GET /api/v1/invoice-positions/{id}
Создание POST /api/v1/invoice-positions
Редактирование PATCH /api/v1/invoice-positions/{id}
Удаление DELETE /api/v1/invoice-positions/{id}

Атрибуты

Атрибуты позиции в счете

{
  "data": {
      "type":"invoice-positions",
      "id": 2,
      "attributes":{
        "name": "",
        "quantity":2,
        "amount": 200.0,
        "is-service": false,
        "code": "222"
        "unit": "шт",
        "discount": "0.0",
        "discount-amount": "0.0",
        "result-vat": "0.0",
        "amount-with-discount": "200.0",
        "result-amount": "200.0",
        "created-at": "2022-02-22T12:22:22.222+03:00",
        "updated-at": "2022-02-22T12:22:22.222+03:00"
      }
   }
}
Имя Тип Пример Запись Описание
name string Товар да Переопределенное наименование товара
quantity integer 2 да Количество товара
discount decimal 0.0 да Скидка на товар (в процентах)
discount-amount decimal 0.0 нет Сумма скидки
amount decimal 2000.0 да Сумма позиции
amount-with-discount decimal 2000,0 нет Сумма позиции с учетом скидки
result-vat decimal 0.0 нет Сумма НДС
result-amount decimal 2000,0 нет Итоговая сумма позиции (с учетом скидки и НДС)
is-service boolean false да Товар (false) или услуга (true)
unit string 'шт' да Единица измерения
code code '222' да Код товара

Связи

Загрузка позиций по определенному счету (id = 2)

curl "https://app.synergycrm.ru/api/v1/invoices/2/relationships/positions" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/invoices/2/relationships/positions");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/invoices/2/relationships/positions')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/invoices/2/relationships/positions", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/invoices/2/relationships/positions',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/invoices/2/relationships/positions"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/invoices/2/relationships/positions'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Название Связь JSON API type
Счет invoice invoices
Продукт product products

Платежи

Пример данных для создания платежа с типом "Приход" и привязкой к сделке. Указываем плательщика (payer), счет получателя (receiver-bank-detail) и счет (invoice), на основании которого происходит операция.

{
  "data":{
    "type":"invoice-payments",
    "attributes":{
      "direction":"income",
      "amount":20.0,
      "operation-created-at":"22.02.2022 12:22"
    },
    "relationships":{
      "deal": {
        "data": {
          "type":"deals",
           "id":2000
        }
      },
      "payer":{
        "data":{
          "type":"companies",
          "id":2222
        }
      },
      "receiver-bank-detail":{
        "data":{
          "type":"account-bank-details",
          "id":22
        }
      },
      "invoice":{
        "data":{
          "type":"invoices",
          "id":222
        }
      }
    }
  }
}

Пример данных для создания платежа с типом "Расход" и привязкой к сделке. Указываем получателя (receiver), счет получателя (receiver-bank-detail) и счет (invoice), на основании которого происходит операция.

{
  "data":{
    "type":"invoice-payments",
    "attributes":{
      "direction":"outcome",
      "amount":20.0,
      "operation-created-at":"22.02.2022 12:22"
    },
    "relationships":{
      "deal": {
        "data": {
          "type":"deals",
          "id":2000
        }
      },
      "receiver":{
        "data":{
          "type":"companies",
          "id":2222
        }
      },
      "payer-bank-detail":{
        "data":{
          "type":"account-bank-details",
          "id":22
        }
      },
      "invoice":{
        "data":{
          "type":"invoices",
          "id":222
        }
      }
    }
  }
}

Пример данных для создания платежа с типом "Перевод". Указываем с какого счета (payer-bank-detail) на какой счет (receiver-bank-detail) происходит перевод.

{
  "data":{
    "type":"invoice-payments",
    "attributes":{
      "direction":"transfer",
      "amount":20.0,
      "operation-created-at":"22.02.2022 12:22"
    },
    "relationships":{
      "payer-bank-detail":{
        "data":{
          "type":"account-bank-details",
          "id":22
        }
      },
      "receiver-bank-detail":{
        "data":{
          "type":"account-bank-details",
          "id":222
        }
      }
    }
  }
}

Атрибуты

Имя Тип Пример Запись Описание
number integer 222 нет Номер автоматический
custom-number string мм.222.пп да Номер ручной
amount decimal 2222.0 да Сумма счета
purpose string Счет №222 да Назначение
operation-created-at* datetime 2022-02-22T12:22:22.222+03:00 да Когда
operation-accounted-at datetime 2022-02-22T12:22:22.222+03:00 да Учесть в
operation-executed-at datetime 2022-02-22T12:22:22.222+03:00 нет Проведено
operation-canceled-at datetime 2022-02-22T12:22:22.222+03:00 нет Отменено
description string Мой комментарий к счету да Комментарий
direction string income да (создание) Тип
status string canceled да Статус платежа
payment-type string non_cash да Тип платежа. Достустимые значения cash и non_cash
customs hash {"custom-1":'custom value'} да Свои поля
previous-responsible-id integer 100 нет Предыдущий ответственный

* Обязательные поля

Фильтры платежей

Получить список платежей, созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/invoice-payments" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/invoice-payments?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/invoice-payments?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/invoice-payments?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/invoice-payments?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/invoice-payments?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/invoice-payments?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести платежи созданные в системе после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести платежи созданные в системе до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести платежи обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести платежи обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00
operation-created-at-gte Вывести платежи сформированные после указанного времени filter[operation-created-at-gte]=2022.02.22 12:00
operation-created-at-lte Вывести платежи сформированные до указанного времени filter[operation-created-at-lte]=2022.02.22 12:00
operation-accounted-at-gte Вывести платежи учтённые после указанного времени filter[operation-accounted-at-gte]=2022.02.22 12:00
operation-accounted-at-lte Вывести платежи учтённые до указанного времени filter[operation-accounted-at-lte]=2022.02.22 12:00
operation-executed-at-gte Вывести платежи исполненные после указанного времени filter[operation-executed-at-gte]=2022.02.22 12:00
operation-executed-at-lte Вывести платежи исполненные до указанного времени filter[operation-executed-at-lte]=2022.02.22 12:00
archived Вывести платежи в архиве filter[archived]=2
discarded Вывести платежи в корзине filter[discarded]=2
actual Вывести актуальные платежи filter[actual]=2

Статусы платежей

Название Код
Исходящий, ожидающий исполнения send_to_bank
Проведен executed
Не проведен not_executed
Запланирован planned
Отменен canceled
Неизвестный unknown
Просрочен overdue
В обработке process

Типы платежей

Название Код
Приход income
Расход outcome
Перевод transfer

Связи

Название Связь JSON API type
Ответственный responsible users
Создатель user users
Сделка deal deals
Заявка order orders
Плательщик payer companies, contacts
Получатель receiver companies, contacts
Счет invoice invoices
Статья операции invoice-payment-category invoice-payment-categories
Банк. реквизиты account-bank-detail account-bank-details
Банк. реквизиты компании company-bank-detail company-bank-details
Со счета payer-bank-detail company-bank-details, account-bank-details
На счет receiver-bank-detail company-bank-details, account-bank-details

Правила создания платежа

В платежах с типом "Приход" (income) контрагентом является Плательщик (payer). Так же необходимо указать банковские реквизиты получателя (receiver-bank-detail).

В платежах с типом "Расход" (outcome) контрагентом является Получатель (receiver).

В платежах с типом "Перевод" (transfer) необходимо указать счет отправителя (payer-bank-detail) и счет получателя (receiver-bank-detail).

Справочники

Получить список этапов сделок

curl "https://app.synergycrm.ru/api/v1/deal-stages" -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/deal-stages");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/deal-stages')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/deal-stages", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deal-stages',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/deal-stages"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/deal-stages'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Добавить новый источник

curl "https://app.synergycrm.ru/api/v1/sources" \
 -X POST \
 -H "Content-Type: application/vnd.api+json" \
 -H "Authorization: Bearer api_token" \
 -d @- << EOF
    {
      "data":{
        "type":"sources",
        "attributes":{
          "name":"Новый источник"
        }
      }
    }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/sources");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"sources\",\"attributes\":{\"name\":\"Новый источник\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/sources')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{      
  "data":{        
    "type":"sources",        
    "attributes":{          
      "name":"Новый источник"        
      }      
    }    
  }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{      
  "data":{        
    "type":"sources",        
    "attributes":{          
      "name":"Новый источник"        
      }      
    }    
  }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/sources", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/sources',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{      
  "data":{        
    "type":"sources",        
    "attributes":{          
      "name":"Новый источник"        
      }      
    }    
  }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/sources"

payload = json.dumps({      
  "data":{        
    "type":"sources",        
    "attributes":{          
      "name":"Новый источник"        
      }      
    }    
  })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/sources'));
  request.body = json.encode({      
  "data":{        
    "type":"sources",        
    "attributes":{          
      "name":"Новый источник"        
      }      
    }    
  });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Справочник JSON API type
Источники sources
Территории areas
Категории своих полей custom-field-categories
Свои поля custom-fields
Продукты products
Конкуренты competitors
Статусы компаний company-statuses
Типы компаний company-types
Воронки сделок deal-stage-categories
Этапы сделок deal-stages
Статусы сделок deal-statuses
Причины поражения сделок deal-loss-reasons
Этапы заявок order-stages
Статусы заявок order-statuses
Склады stores
Причины поражения заявок order-loss-reasons
Скидки product-discounts
Типы продкутов product-types
Статусы продуктов product-statuses
Категории продуктов product-categories
Статусы телефонии telephony-statuses
Статьи операций invoice-payment-categories
Группы пользователей user-groups
Должности пользователей work-positions
Дополнительные роли custom-roles
Категории документа document-template-categories
Метки задач labels

Запросы к справочникам имеют следующий формат:

URL /api/v1/{json_api_type}
Список GET /api/v1/{json_api_type}
Чтение GET /api/v1/{json_api_type}/{id}
Создание POST /api/v1/{json_api_type}
Редактирование PATCH /api/v1/{json_api_type}/{id}
Удаление DELETE /api/v1/{json_api_type}/{id}

Территории

Создание новой территории

curl "https://app.synergycrm.ru/api/v1/areas" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"areas",
         "attributes":{
           "name":"Моя территория"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/areas");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"areas\",\"attributes\":{\"name\":\"Моя территория\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/areas')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"areas",
         "attributes":{
           "name":"Моя территория"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"areas",
         "attributes":{
           "name":"Моя территория"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/areas", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/areas',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"areas",
         "attributes":{
           "name":"Моя территория"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/areas"

payload = json.dumps({
       "data":{
         "type":"areas",
         "attributes":{
           "name":"Моя территория"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/areas'));
  request.body = json.encode({
       "data":{
         "type":"areas",
         "attributes":{
           "name":"Моя территория"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Создание новой территории с привязанными сотрудниками

curl "https://app.synergycrm.ru/api/v1/areas" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"areas",
         "attributes":{
           "name":"Моя территория"
         },
         "relationships":{
           "users":{
             "data":[{
               "type":"users",
               "id":"2"
             },{
               "type":"users",
               "id":"2"
             }]
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/areas");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"areas\",\"attributes\":{\"name\":\"Моя территория\"},\"relationships\":{\"users\":{\"data\":[{\"type\":\"users\",\"id\":\"2\"},{\"type\":\"users\",\"id\":\"2\"}]}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/areas')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"areas",
         "attributes":{
           "name":"Моя территория"
         },
         "relationships":{
           "users":{
             "data":[{
               "type":"users",
               "id":"2"
             },{
               "type":"users",
               "id":"2"
             }]
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"areas",
         "attributes":{
           "name":"Моя территория"
         },
         "relationships":{
           "users":{
             "data":[{
               "type":"users",
               "id":"2"
             },{
               "type":"users",
               "id":"2"
             }]
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/areas", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/areas',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"areas",
         "attributes":{
           "name":"Моя территория"
         },
         "relationships":{
           "users":{
             "data":[{
               "type":"users",
               "id":"2"
             },{
               "type":"users",
               "id":"2"
             }]
           }
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/areas"

payload = json.dumps({
       "data":{
         "type":"areas",
         "attributes":{
           "name":"Моя территория"
         },
         "relationships":{
           "users":{
             "data":[{
               "type":"users",
               "id":"2"
             },{
               "type":"users",
               "id":"2"
             }]
           }
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/areas'));
  request.body = json.encode({
       "data":{
         "type":"areas",
         "attributes":{
           "name":"Моя территория"
         },
         "relationships":{
           "users":{
             "data":[{
               "type":"users",
               "id":"2"
             },{
               "type":"users",
               "id":"2"
             }]
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type areas
URL /api/v1/areas
Список GET /api/v1/areas
Чтение GET /api/v1/areas/{id}
Создание POST /api/v1/areas
Редактирование PATCH /api/v1/areas/{id}
Удаление DELETE /api/v1/areas/{id}

Атрибуты

Атрибуты территории

{
  "data": {
      "type":"areas",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Моя территория"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Моя территория да Имя территории
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список территорий созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/areas" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести территории созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести территории созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести территории обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести территории обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Конкуренты

Создание нового конкурента

curl "https://app.synergycrm.ru/api/v1/competitors" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"competitors",
         "attributes":{
           "name":"Конкурент по API",
           "description":"ООО \"Конкурент\""
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/competitors");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"competitors\",\"attributes\":{\"name\":\"Конкурент по API\",\"description\":\"ООО \\\"Конкурент\\\"\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/competitors')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"competitors",
         "attributes":{
           "name":"Конкурент по API",
           "description":"ООО \"Конкурент\""
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"competitors",
         "attributes":{
           "name":"Конкурент по API",
           "description":"ООО \"Конкурент\""
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/competitors", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/competitors',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"competitors",
         "attributes":{
           "name":"Конкурент по API",
           "description":"ООО \"Конкурент\""
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/competitors"

payload = json.dumps({
       "data":{
         "type":"competitors",
         "attributes":{
           "name":"Конкурент по API",
           "description":"ООО \"Конкурент\""
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/competitors'));
  request.body = json.encode({
       "data":{
         "type":"competitors",
         "attributes":{
           "name":"Конкурент по API",
           "description":"ООО \"Конкурент\""
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type competitors
URL /api/v1/competitors
Список GET /api/v1/competitors
Чтение GET /api/v1/competitors/{id}
Создание POST /api/v1/competitors
Редактирование PATCH /api/v1/competitors/{id}
Удаление DELETE /api/v1/competitors/{id}

Атрибуты

Атрибуты конкурента

{
  "data": {
      "type":"competitors",
      "id":"1",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Конкурент по API",
        "description": "ООО \"Конкурент\""
      }
   }
}
Имя Тип Пример Запись Описание
name* string ООО "Конкурент" да Имя конкурента
description string Разработка компьютерного программного обеспечения да Описание конкурента
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список конкурентов созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/competitors" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести конкурентов созданных после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести конкурентов созданных до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести конкурентов обновлённых после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести конкурентов обновлённых до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Категории своих полей

Создание категории своих полей

curl "https://app.synergycrm.ru/api/v1/custom-field-categories" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"custom-field-categories",
         "attributes":{
           "class-name":"Order",
           "name":"Категория полей по API"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/custom-field-categories");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"custom-field-categories\",\"attributes\":{\"class-name\":\"Order\",\"name\":\"Категория полей по API\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/custom-field-categories')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"custom-field-categories",
         "attributes":{
           "class-name":"Order",
           "name":"Категория полей по API"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"custom-field-categories",
         "attributes":{
           "class-name":"Order",
           "name":"Категория полей по API"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/custom-field-categories", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-field-categories',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"custom-field-categories",
         "attributes":{
           "class-name":"Order",
           "name":"Категория полей по API"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/custom-field-categories"

payload = json.dumps({
       "data":{
         "type":"custom-field-categories",
         "attributes":{
           "class-name":"Order",
           "name":"Категория полей по API"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/custom-field-categories'));
  request.body = json.encode({
       "data":{
         "type":"custom-field-categories",
         "attributes":{
           "class-name":"Order",
           "name":"Категория полей по API"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Атрибуты

Атрибуты категории дополнительного поля

{
  "data": {
    "id": "2",
    "type": "custom-field-categories",
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/custom-field-categories/2"
    },
    "attributes": {
      "created-at": "2022-02-22T12:22:22.222+03:00",
      "updated-at": "2022-02-22T12:22:22.222+03:00",
      "name": "Категория полей по API",
      "class-name": "Order"
    }
  }
}
Имя Тип Пример Запись Описание
name* string День рождения да Название
class-name* string TelephonyCall да Класс объекта

* Обязательные поля

Ограничения по значениям

Аттрибут Варианты
class-name Company, Contact, Deal, Order, User, Product, TelephonyCall

Фильтры

Получить список категорий своих полей созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/competitors" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
class-name Вывести категории полей по определенному классу filter[class-name]=Deal
created-at-gte Вывести категории полей созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести категории полей созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести категории полей обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести категории полей обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Свои поля

Создание поля с предустановленной категорией своих полей

curl "https://app.synergycrm.ru/api/v1/custom-fields" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "text",
           "name":"Своё поле по API"
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/custom-fields");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"custom-fields\",\"attributes\":{\"required\":false,\"resource-name\": \"deals\",\"field-type\": \"text\",\"name\":\"Своё поле по API\"},\"relationships\":{\"custom-field-category\":{\"data\":{\"type\":\"custom-fields-categories\",\"id\":\"2\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/custom-fields')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "text",
           "name":"Своё поле по API"
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "text",
           "name":"Своё поле по API"
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/custom-fields", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-fields',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "text",
           "name":"Своё поле по API"
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/custom-fields"

payload = json.dumps({
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "text",
           "name":"Своё поле по API"
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/custom-fields'));
  request.body = json.encode({
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "text",
           "name":"Своё поле по API"
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Атрибуты

Атрибуты дополнительного поля

{
  "data": {
    "id": "2",
    "type": "custom-fields",
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/custom-fields/2"
    },
    "attributes": {
      "created-at": "2022-02-22T12:22:22.222+03:00",
      "updated-at": "2022-02-22T12:22:22.222+03:00",
      "name": "Мое название поля",
      "required": false,
      "resource-name": "deals",
      "field-type": "text",
      "attribute-name": "custom-2",
      "params": {
        "acts_like":"text"
      }
    }
  }
}
Имя Тип Пример Запись Описание
name* string Мое название поля да Название
resource-name* string deals да Расширяемый ресурс
field-type* string text да Тип поля
required boolean true да Обязательное поле
attribute-name string custom-2 нет Имя аттрибута для JSON API
params object { "options": ["Пункт 1", "Пункт 2"] } нет Дополнительные параметры поля
select-options array [ "Пункт 1", "Пункт 2" ] да Атрибут для установки вариантов селекта (только у field-type select и только при создании и обновлении)
tree-options array [ { "name": "test", "childs": [] } ] да Дерево (только у field-type tree). Доступны также через отдельный ресурс

* Обязательные поля

Ограничения по значениям

Аттрибут Варианты
resource-name contacts, companies, deals, diaries, orders, products, telephony-calls, users
field-type text, date, number, select, tree

Фильтры

Получить список своих полей для сделок

curl "https://app.synergycrm.ru/api/v1/custom-fields" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  -d "filter[resources]=deals"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/custom-fields");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");
		httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("filter[resources]=deals");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/custom-fields')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/x-www-form-urlencoded'
req['Authorization'] = 'Bearer api_token'

req.body = 'filter[resources]=deals'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`filter[resources]=deals`)
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/custom-fields", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-fields?filter[resources]=deals',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/custom-fields?filter[resources]=deals"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/custom-fields'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Пример ответа поля с типом "текст"

{
    "data": [
        {
            "id": "716",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/716"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "Текст",
                "field-type": "text",
                "required": false,
                "resource-name": "deals",
                "attribute-name": "custom-716",
                "params": {
                    "multiple": "0",
                    "acts_like": "text",
                    "beauty_phone": "0"
                }
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/716/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/716/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "число"

{
    "data": [
        {
            "id": "717",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/717"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "Число",
                "field-type": "number",
                "required": true,
                "resource-name": "deals",
                "attribute-name": "custom-717",
                "params": {
                    "extension": "кг",
                    "only_integer": "1",
                    "extension_type": "unit"
                }
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/717/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/717/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "дата"

{
    "data": [
        {
            "id": "718",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/718"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "Дата",
                "field-type": "date",
                "required": false,
                "resource-name": "deals",
                "attribute-name": "custom-718",
                "params": {
                    "with_time": "1"
                }
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/718/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/718/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "файл"

{
    "data": [
        {
            "id": "719",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/719"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "Файл",
                "field-type": "file",
                "required": false,
                "resource-name": "deals",
                "attribute-name": "custom-719",
                "params": {
                    "public_upload": "1"
                }
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/719/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/719/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "список внешний источник"

{
    "data": [
        {
            "id": "720",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/720"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "список внешний источник",
                "field-type": "external_select",
                "required": false,
                "resource-name": "deals",
                "attribute-name": "custom-720",
                "params": {
                    "multiple": "1",
                    "password": "value",
                    "username": "value",
                    "color_key": "value",
                    "json_path": "value",
                    "label_key": "value",
                    "value_key": "value",
                    "external_source": "https://sire.ru"
                }
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/720/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/720/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "список"

{
    "data": [
        {
            "id": "721",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/721"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "Список",
                "field-type": "select",
                "required": false,
                "resource-name": "deals",
                "attribute-name": "custom-721",
                "params": {
                    "colors": [
                        "#9b3178",
                        "#9f3e2d",
                        "#9e342e"
                    ],
                    "values": [],
                    "options": [
                        "Первый",
                        "Второй",
                        "Третий"
                    ],
                    "multiple": "1",
                    "display_as": "select"
                },
                "select-options": [
                    "Первый",
                    "Второй",
                    "Третий"
                ]
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/721/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/721/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "формула"

{
    "data": [
        {
            "id": "711",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/711"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "Формула",
                "field-type": "formula",
                "required": false,
                "resource-name": "deals",
                "attribute-name": "custom-711",
                "params": {
                    "formula": "<p><span class=\"label label-default fr-deletable\" contenteditable=\"false\" data-method=\"deal.amount\" data-time=\"1681972019977\">Сумма</span>* <span class=\"label label-default fr-deletable\" contenteditable=\"false\" data-method=\"deal.profit\" data-time=\"1681972028924\">Прибыль</span> / <span class=\"label label-default fr-deletable\" contenteditable=\"false\" data-method=\"deal.cost\" data-time=\"1681972038442\">Себестоимость</span> </p>",
                    "dependencies": {
                        "Deal": [
                            "amount",
                            "profit",
                            "cost"
                        ]
                    }
                }
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/711/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/711/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "рейтинг"

{
    "data": [
        {
            "id": "740",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/740"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "рейтинг",
                "field-type": "rating",
                "required": false,
                "resource-name": "deals",
                "attribute-name": "custom-740",
                "params": {} ## значение от 1 до 5
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/740/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/740/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "связь"

{
    "data": [
        {
            "id": "741",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/741"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "связь",
                "field-type": "relation",
                "required": false,
                "resource-name": "deals",
                "attribute-name": "custom-741",
                "params": {
                    "relation_class": "Deal"
                }
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/741/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/741/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "множественная связь"

{
    "data": [
        {
            "id": "713",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/713"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "Множественная связь",
                "field-type": "multiple_relation",
                "required": false,
                "resource-name": "deals",
                "attribute-name": "custom-713",
                "params": {
                    "read_all": "1",
                    "relation_class": "Deal"
                }
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/713/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/713/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "нумератор"

{
    "data": [
        {
            "id": "742",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/742"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "нумератор",
                "field-type": "sequence",
                "required": false,
                "resource-name": "deals",
                "attribute-name": "custom-742",
                "params": {
                    "mask": "2023-1-А",
                    "start_number": 1,
                    "auto_sequence": "1",
                    "sequence_group": "year"
                }
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/742/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/742/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "дерево"

{
    "data": [
        {
            "id": "714",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/714"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "Дерево",
                "field-type": "tree",
                "required": true,
                "resource-name": "deals",
                "attribute-name": "custom-714",
                "params": {
                    "multiple": "1"
                },
                "tree-options": [
                    {
                        "id": 1066,
                        "name": "Пункт 1",
                        "childs": [
                            {
                                "id": 1067,
                                "name": "Пункт 1.1",
                                "childs": [
                                    {
                                        "id": 1068,
                                        "name": "Пункт 1.1.1",
                                        "childs": []
                                    }
                                ]
                            },
                            {
                                "id": 1069,
                                "name": "Пункт 1.2",
                                "childs": [
                                    {
                                        "id": 1070,
                                        "name": "Пункт 1.2.1",
                                        "childs": []
                                    },
                                    {
                                        "id": 1071,
                                        "name": "Пункт 1.2.2",
                                        "childs": []
                                    }
                                ]
                            }
                        ]
                    }
                ]
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/714/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/714/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "курс валюты"

{
    "data": [
        {
            "id": "715",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/715"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "Курс Валюты",
                "field-type": "exchange_rate",
                "required": false,
                "resource-name": "deals",
                "attribute-name": "custom-715",
                "params": {
                    "currency": "14"
                }
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/715/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/715/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "таймер"

{
    "data": [
        {
            "id": "743",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/743"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "таймер",
                "field-type": "timer",
                "required": false,
                "resource-name": "deals",
                "attribute-name": "custom-743",
                "params": {
                    "time_unit": "hours"
                }
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/743/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/743/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}
Фильтр Описание Пример
resources Вывести поля по определенному resource-name filter[resources]=deals
created-at-gte Вывести объекты, созданные после указанного времени filter[created-at-gte]=2017.08.01 12:00
created-at-lte Вывести объекты, созданные до указанного времени filter[created-at-lte]=2017.08.01 12:00
updated-at-gte Вывести объекты, обновлённые после указанного времени filter[updated-at-gte]=2017.08.01 12:00
updated-at-lte Вывести объекты, обновлённые до указанного времени filter[updated-at-lte]=2017.08.01 12:00

Параметры дерева

Имя Тип Пример Запись Описание
id integer 23 нет Системный идентификатор узла дерева
name* string `Узел** да Текст узла
childs* object [{"name":"test", "childs":[]}] Дочерние узлы дерева  

* Обязательные поля

Обноление своего поля с типом список и двумя пунктами

curl "https://app.synergycrm.ru/api/v1/custom-fields" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "select",
           "name":"Мое поле список по API",
           "select-options": [
               "Пункт 1",
               "Пункт 2"
           ]
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     }

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/custom-fields");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"custom-fields\",\"attributes\":{\"required\": false,\"resource-name\": \"deals\",\"field-type\": \"select\",\"name\":\"Мое поле список по API\",\"select-options\": [\"Пункт 1\",\"Пункт 2\"]},\"relationships\":{\"custom-field-category\":{\"data\":{\"type\":\"custom-fields-categories\",\"id\":\"2\"}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/custom-fields')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "select",
           "name":"Мое поле список по API",
           "select-options": [
               "Пункт 1",
               "Пункт 2"
           ]
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "select",
           "name":"Мое поле список по API",
           "select-options": [
               "Пункт 1",
               "Пункт 2"
           ]
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/custom-fields", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-fields',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "select",
           "name":"Мое поле список по API",
           "select-options": [
               "Пункт 1",
               "Пункт 2"
           ]
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/custom-fields"

payload = json.dumps({
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "select",
           "name":"Мое поле список по API",
           "select-options": [
               "Пункт 1",
               "Пункт 2"
           ]
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/custom-fields'));
  request.body = json.encode({
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "select",
           "name":"Мое поле список по API",
           "select-options": [
               "Пункт 1",
               "Пункт 2"
           ]
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Создание своего поля с типом дерево. Каждому пункту будет присвоен

curl "https://app.synergycrm.ru/api/v1/custom-fields" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "tree",
           "name":"Мое поле дерево по API",
           "tree-options": [
             {
               "name": "Первый узел",
               "childs": [
                 {
                   "name": "Вложенный узел",
                   "childs": []
                 }
               ]
             }
           ]
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/custom-fields");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"custom-fields\",\"attributes\":{\"required\": false,\"resource-name\": \"deals\",\"field-type\": \"tree\",\"name\":\"Мое поле дерево по API\",\"tree-options\": [{\"name\": \"Первый узел\",\"childs\": [{\"name\":\"Вложенный узел\",\"childs\": []}]}]},\"relationships\":{\"custom-field-category\":{\"data\":{\"type\":\"custom-fields-categories\",\"id\":\"2\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/custom-fields')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "tree",
           "name":"Мое поле дерево по API",
           "tree-options": [
             {
               "name": "Первый узел",
               "childs": [
                 {
                   "name": "Вложенный узел",
                   "childs": []
                 }
               ]
             }
           ]
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "tree",
           "name":"Мое поле дерево по API",
           "tree-options": [
             {
               "name": "Первый узел",
               "childs": [
                 {
                   "name": "Вложенный узел",
                   "childs": []
                 }
               ]
             }
           ]
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/custom-fields", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-fields',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "tree",
           "name":"Мое поле дерево по API",
           "tree-options": [
             {
               "name": "Первый узел",
               "childs": [
                 {
                   "name": "Вложенный узел",
                   "childs": []
                 }
               ]
             }
           ]
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/custom-fields"

payload = json.dumps({
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "tree",
           "name":"Мое поле дерево по API",
           "tree-options": [
             {
               "name": "Первый узел",
               "childs": [
                 {
                   "name": "Вложенный узел",
                   "childs": []
                 }
               ]
             }
           ]
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/custom-fields'));
  request.body = json.encode({
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "tree",
           "name":"Мое поле дерево по API",
           "tree-options": [
             {
               "name": "Первый узел",
               "childs": [
                 {
                   "name": "Вложенный узел",
                   "childs": []
                 }
               ]
             }
           ]
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Обноление своего поля с типом дерево

curl "https://app.synergycrm.ru/api/v1/custom-fields" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "tree",
           "name":"Своё поле из API",
           "tree-options": [
             {
               "id": 20
               "name": "Первый узел",
               "childs": [
                 {
                   "id": 22
                   "name": "Переименованный узел",
                   "childs": []
                 }
               ]
             }
           ]
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     }

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/custom-fields");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"custom-fields\",\"attributes\":{\"required\": false,\"resource-name\": \"deals\",\"field-type\": \"tree\",\"name\":\"Своё поле из API\",\"tree-options\": [{\"id\": 20\"name\": \"Первый узел\",\"childs\": [{\"id\": 22\"name\": \"Переименованный узел\",\"childs\": []}]}]},\"relationships\":{\"custom-field-category\":{\"data\":{\"type\":\"custom-fields-categories\",\"id\":\"2\"}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/custom-fields')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "tree",
           "name":"Своё поле из API",
           "tree-options": [
             {
               "id": 20
               "name": "Первый узел",
               "childs": [
                 {
                   "id": 22
                   "name": "Переименованный узел",
                   "childs": []
                 }
               ]
             }
           ]
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "tree",
           "name":"Своё поле из API",
           "tree-options": [
             {
               "id": 20
               "name": "Первый узел",
               "childs": [
                 {
                   "id": 22
                   "name": "Переименованный узел",
                   "childs": []
                 }
               ]
             }
           ]
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/custom-fields", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-fields',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "tree",
           "name":"Своё поле из API",
           "tree-options": [
             {
               "id": 20
               "name": "Первый узел",
               "childs": [
                 {
                   "id": 22
                   "name": "Переименованный узел",
                   "childs": []
                 }
               ]
             }
           ]
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/custom-fields"

payload = json.dumps({
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "tree",
           "name":"Своё поле из API",
           "tree-options": [
             {
               "id": 20
               "name": "Первый узел",
               "childs": [
                 {
                   "id": 22
                   "name": "Переименованный узел",
                   "childs": []
                 }
               ]
             }
           ]
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/custom-fields'));
  request.body = json.encode({
       "data":{
         "type":"custom-fields",
         "attributes":{
           "required": false,
           "resource-name": "deals",
           "field-type": "tree",
           "name":"Своё поле из API",
           "tree-options": [
             {
               "id": 20
               "name": "Первый узел",
               "childs": [
                 {
                   "id": 22
                   "name": "Переименованный узел",
                   "childs": []
                 }
               ]
             }
           ]
         },
         "relationships":{
           "custom-field-category":{
             "data":{
               "type":"custom-fields-categories",
               "id":"2"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Пункты списка своего поля типа "Дерево"

Создание нового пункта для определённого своего поля

curl "https://app.synergycrm.ru/api/v1/custom-field-options" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"custom-field-options",
         "attributes":{
           "name":"Пункт по API"
         },
         "relationships":{
           "custom-field":{
             "data":{
               "type":"custom-fields",
               "id":"2"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/custom-field-options");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"custom-field-options\",\"attributes\":{\"name\":\"Пункт по API\"},\"relationships\":{\"custom-field\":{\"data\":{\"type\":\"custom-fields\",\"id\":\"2\"}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/custom-field-options')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"custom-field-options",
         "attributes":{
           "name":"Пункт по API"
         },
         "relationships":{
           "custom-field":{
             "data":{
               "type":"custom-fields",
               "id":"2"
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"custom-field-options",
         "attributes":{
           "name":"Пункт по API"
         },
         "relationships":{
           "custom-field":{
             "data":{
               "type":"custom-fields",
               "id":"2"
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/custom-field-options", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-field-options',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"custom-field-options",
         "attributes":{
           "name":"Пункт по API"
         },
         "relationships":{
           "custom-field":{
             "data":{
               "type":"custom-fields",
               "id":"2"
             }
           }
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/custom-field-options"

payload = json.dumps({
       "data":{
         "type":"custom-field-options",
         "attributes":{
           "name":"Пункт по API"
         },
         "relationships":{
           "custom-field":{
             "data":{
               "type":"custom-fields",
               "id":"2"
             }
           }
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/custom-field-options'));
  request.body = json.encode({
       "data":{
         "type":"custom-field-options",
         "attributes":{
           "name":"Пункт по API"
         },
         "relationships":{
           "custom-field":{
             "data":{
               "type":"custom-fields",
               "id":"2"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Создание нового пункта для определённого своего поля с предустановленным родительским пунктом

curl "https://app.synergycrm.ru/api/v1/custom-field-options" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"custom-field-options",
         "attributes":{
           "name":"Пункт по API"
         },
         "relationships":{
           "custom-field":{
             "data":{
               "type":"custom-fields",
               "id":"2"
             }
           },
           "parent":{
             "data": {
               "type":"custom-field-options",
               "id":"2"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/custom-field-options");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"custom-field-options\",\"attributes\":{\"name\":\"Пункт по API\"},\"relationships\":{\"custom-field\":{\"data\":{\"type\":\"custom-fields\",\"id\":\"2\"}},\"parent\":{\"data\": {\"type\":\"custom-field-options\",\"id\":\"2\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/custom-field-options')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"custom-field-options",
         "attributes":{
           "name":"Пункт по API"
         },
         "relationships":{
           "custom-field":{
             "data":{
               "type":"custom-fields",
               "id":"2"
             }
           },
           "parent":{
             "data": {
               "type":"custom-field-options",
               "id":"2"
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"custom-field-options",
         "attributes":{
           "name":"Пункт по API"
         },
         "relationships":{
           "custom-field":{
             "data":{
               "type":"custom-fields",
               "id":"2"
             }
           },
           "parent":{
             "data": {
               "type":"custom-field-options",
               "id":"2"
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/custom-field-options", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-field-options',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"custom-field-options",
         "attributes":{
           "name":"Пункт по API"
         },
         "relationships":{
           "custom-field":{
             "data":{
               "type":"custom-fields",
               "id":"2"
             }
           },
           "parent":{
             "data": {
               "type":"custom-field-options",
               "id":"2"
             }
           }
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/custom-field-options"

payload = json.dumps({
       "data":{
         "type":"custom-field-options",
         "attributes":{
           "name":"Пункт по API"
         },
         "relationships":{
           "custom-field":{
             "data":{
               "type":"custom-fields",
               "id":"2"
             }
           },
           "parent":{
             "data": {
               "type":"custom-field-options",
               "id":"2"
             }
           }
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/custom-field-options'));
  request.body = json.encode({
       "data":{
         "type":"custom-field-options",
         "attributes":{
           "name":"Пункт по API"
         },
         "relationships":{
           "custom-field":{
             "data":{
               "type":"custom-fields",
               "id":"2"
             }
           },
           "parent":{
             "data": {
               "type":"custom-field-options",
               "id":"2"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Перенос пункта от одного родителя другому

curl "https://app.synergycrm.ru/api/v1/custom-field-options/2" \
  -X PATCH \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "id":"2"
         "type":"custom-field-options",
         "relationships":{
           "custom-field":{
             "data":{
               "type":"custom-fields",
               "id":"22"
             }
           },
           "parent":{
             "data": {
               "type":"custom-field-options",
               "id":"22"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/custom-field-options/2");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("PATCH");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"id\":\"2\"\"type\":\"custom-field-options\",\"relationships\":{\"custom-field\":{\"data\":{\"type\":\"custom-fields\",\"id\":\"22\"}},\"parent\":{\"data\": {\"type\":\"custom-field-options\",\"id\":\"22\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/custom-field-options/2')
req = Net::HTTP::Patch.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "id":"2"
         "type":"custom-field-options",
         "relationships":{
           "custom-field":{
             "data":{
               "type":"custom-fields",
               "id":"22"
             }
           },
           "parent":{
             "data": {
               "type":"custom-field-options",
               "id":"22"
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "id":"2"
         "type":"custom-field-options",
         "relationships":{
           "custom-field":{
             "data":{
               "type":"custom-fields",
               "id":"22"
             }
           },
           "parent":{
             "data": {
               "type":"custom-field-options",
               "id":"22"
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("PATCH", "https://app.synergycrm.ru/api/v1/custom-field-options/2", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-field-options/2',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "id":"2"
         "type":"custom-field-options",
         "relationships":{
           "custom-field":{
             "data":{
               "type":"custom-fields",
               "id":"22"
             }
           },
           "parent":{
             "data": {
               "type":"custom-field-options",
               "id":"22"
             }
           }
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/custom-field-options/2"

payload = json.dumps({
       "data":{
         "id":"2"
         "type":"custom-field-options",
         "relationships":{
           "custom-field":{
             "data":{
               "type":"custom-fields",
               "id":"22"
             }
           },
           "parent":{
             "data": {
               "type":"custom-field-options",
               "id":"22"
             }
           }
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/custom-field-options/2'));
  request.body = json.encode({
       "data":{
         "id":"2"
         "type":"custom-field-options",
         "relationships":{
           "custom-field":{
             "data":{
               "type":"custom-fields",
               "id":"22"
             }
           },
           "parent":{
             "data": {
               "type":"custom-field-options",
               "id":"22"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Имя Тип Пример Запись Описание
name* string Пункт да Название

* Обязательные поля

Связи

Пример данных (перечислены не все связи)

{
  "data": {
      "type":"custom-field-options",
      "id":"2",
      "relationships":{
        "parent":{
          "links":{
            "self":"/api/v1/diary-events/2/relationships/parent",
            "related":"/api/v1/diary-events/2/parent"
          }
        },
        "custom-field":{
          "links":{
            "self":"/api/v1/diary-events/2/relationships/custom-field",
            "related":"/api/v1/diary-events/2/custom-field"
          }
        }
      }
  }
}

Пример запроса с загруженными типами задачи и отвественными

curl "https://app.synergycrm.ru/api/v1/custom-field-options?include=parent" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/custom-field-options?include=parent");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/custom-field-options')
params = {
  :include => 'parent',
}
uri.query = URI.encode_www_form(params)

req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/custom-field-options?include=parent", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-field-options?include=parent',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/custom-field-options?include=parent"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/custom-field-options?include=parent'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Своё поле custom-field custom-fields
Родительский пункт parent custom-field-options
Дочерние пункты children custom-field-options
Поддерево subtree custom-field-options

Фильтры

Получить список своих полей для сделок

curl "https://app.synergycrm.ru/api/v1/custom-field-options" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  -d "filter[custom-field-id]=2"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/custom-field-options");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");
		httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("filter[custom-field-id]=2");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/custom-field-options')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/x-www-form-urlencoded'
req['Authorization'] = 'Bearer api_token'

req.body = 'filter[custom-field-id]=2'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`filter[custom-field-id]=2`)
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/custom-field-options", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-field-options?filter[custom-field-id]=2',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/custom-field-options?filter[custom-field-id]=2"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/custom-field-options'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
custom-field-id Вывести поля по определенному идентификтору своего поля filter[custom-field-id]=deals

Визиты Roistat

Создание нового идентификатора визита Roistat с привязанной сделкой к нему

curl "https://app.synergycrm.ru/api/v1/roistat-relations" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"roistat-relations",
         "attributes":{
           "roistat-visit":"2",
         },
         "relationships":{
           "account": {
             "data": {
               "id": 2,
               "type": "roistat-accounts"
             }
           },
           "entity": {
             "data": {
               "id": 2,
               "type": "deals"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/roistat-relations");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"roistat-relations\",\"attributes\":{\"roistat-visit\":\"2\",},\"relationships\":{\"account\": {\"data\": {\"id\": 2,\"type\": \"roistat-accounts\"}},\"entity\": {\"data\": {\"id\": 2,\"type\": \"deals\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/roistat-relations')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"roistat-relations",
         "attributes":{
           "roistat-visit":"2",
         },
         "relationships":{
           "account": {
             "data": {
               "id": 2,
               "type": "roistat-accounts"
             }
           },
           "entity": {
             "data": {
               "id": 2,
               "type": "deals"
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"roistat-relations",
         "attributes":{
           "roistat-visit":"2",
         },
         "relationships":{
           "account": {
             "data": {
               "id": 2,
               "type": "roistat-accounts"
             }
           },
           "entity": {
             "data": {
               "id": 2,
               "type": "deals"
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/roistat-relations", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/roistat-relations',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"roistat-relations",
         "attributes":{
           "roistat-visit":"2",
         },
         "relationships":{
           "account": {
             "data": {
               "id": 2,
               "type": "roistat-accounts"
             }
           },
           "entity": {
             "data": {
               "id": 2,
               "type": "deals"
             }
           }
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/roistat-relations"

payload = json.dumps({
       "data":{
         "type":"roistat-relations",
         "attributes":{
           "roistat-visit":"2",
         },
         "relationships":{
           "account": {
             "data": {
               "id": 2,
               "type": "roistat-accounts"
             }
           },
           "entity": {
             "data": {
               "id": 2,
               "type": "deals"
             }
           }
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/roistat-relations'));
  request.body = json.encode({
       "data":{
         "type":"roistat-relations",
         "attributes":{
           "roistat-visit":"2",
         },
         "relationships":{
           "account": {
             "data": {
               "id": 2,
               "type": "roistat-accounts"
             }
           },
           "entity": {
             "data": {
               "id": 2,
               "type": "deals"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type roistat-relations
URL /api/v1/roistat-relations
Список GET /api/v1/roistat-relations
Чтение GET /api/v1/roistat-relations/{id}
Создание POST /api/v1/roistat-relations
Редактирование PATCH /api/v1/roistat-relations/{id}
Удаление DELETE /api/v1/roistat-relations/{id}

Атрибуты

Атрибуты визита Roistat

{
  "data": {
    "type":"roistat-relations",
    "id":"2",
    "attributes":{
      "roistat-visit": "222"
    }
  }
}
Имя Тип Пример Запись Описание
roistat-visit* string Идентификатор визита Roistat да Идентификатор присвоенный объекту, передаётся в Roistat

* Обязательные поля

Связи

Пример запроса с загруженным объектом

curl "https://app.synergycrm.ru/api/v1/contacts?include=entity" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/contacts?include=entity");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/contacts')
params = {
  :include => 'entity',
}
uri.query = URI.encode_www_form(params)

req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/contacts?include=entity", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contacts?include=entity',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/contacts?include=entity"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/contacts?include=entity'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Интеграция с Roistat account roistat-accounts
Объект entity deals, orders, telephony-calls, contacts

* Связи являются обязательными для создания и обновления

Фильтры

Получить список визитов созданных со звонком

curl -G "https://app.synergycrm.ru/api/v1/roistat-relations" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[entity-type]=telephony-calls"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/roistat-relations?filter[entity-type]=telephony-calls");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/roistat-relations?filter[entity-type]=telephony-calls')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/roistat-relations?filter[entity-type]=telephony-calls", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/roistat-relations?filter[entity-type]=telephony-calls',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/roistat-relations?filter[entity-type]=telephony-calls"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/roistat-relations?filter[entity-type]=telephony-calls'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
roistat-account-id Вывести визиты по определенному идентификатору интеграции с Roistat filter[roistat-account-id]=2
entity-type Вывести визиты по определенному entity-type filter[entity-type]=deals
entity-id Вывести визиты по определенному entity-id filter[entity-id]=2
created-at-gte Вывести визиты созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести визиты созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести визиты обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести визиты обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Источники

Создание нового источника

curl "https://app.synergycrm.ru/api/v1/sources" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"sources",
         "attributes":{
           "name":"Источник по API"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/sources");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"sources\",\"attributes\":{\"name\":\"Источник по API\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/sources')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"sources",
         "attributes":{
           "name":"Источник по API"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"sources",
         "attributes":{
           "name":"Источник по API"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/sources", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/sources',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"sources",
         "attributes":{
           "name":"Источник по API"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/sources"

payload = json.dumps({
       "data":{
         "type":"sources",
         "attributes":{
           "name":"Источник по API"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/sources'));
  request.body = json.encode({
       "data":{
         "type":"sources",
         "attributes":{
           "name":"Источник по API"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type sources
URL /api/v1/sources
Список GET /api/v1/sources
Чтение GET /api/v1/sources/{id}
Создание POST /api/v1/sources
Редактирование PATCH /api/v1/sources/{id}
Удаление DELETE /api/v1/sources/{id}

Атрибуты

Атрибуты источника

{
  "data": {
      "type":"sources",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Мой источник"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Мой источник да Имя источника
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Ограничения по значениям

Аттрибут Варианты
type per_lead, flat_fee

Фильтры

Получить список источников созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/sources" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/sources?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/sources?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/sources?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/sources?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/sources?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/sources?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
name Вывести источники с указанным именем filter[name]=Сайт
created-at-gte Вывести источники созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести источники созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести источники обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести источники обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Должности

Создание новой должности

curl "https://app.synergycrm.ru/api/v1/work-positions" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"work-positions",
         "attributes":{
           "name":"Менеджер"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/work-positions");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"work-positions\",\"attributes\":{\"name\":\"Менеджер\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/work-positions')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"work-positions",
         "attributes":{
           "name":"Менеджер"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"work-positions",
         "attributes":{
           "name":"Менеджер"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/work-positions", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/work-positions',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"work-positions",
         "attributes":{
           "name":"Менеджер"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/work-positions"

payload = json.dumps({
       "data":{
         "type":"work-positions",
         "attributes":{
           "name":"Менеджер"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/work-positions'));
  request.body = json.encode({
       "data":{
         "type":"work-positions",
         "attributes":{
           "name":"Менеджер"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type work-positions
URL /api/v1/work-positions
Список GET /api/v1/work-positions
Чтение GET /api/v1/work-positions/{id}
Создание POST /api/v1/work-positions
Редактирование PATCH /api/v1/work-positions/{id}
Удаление DELETE /api/v1/work-positions/{id}

Атрибуты

Атрибуты должности

{
  "data": {
      "type":"work-positions",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Менеджер"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Менеджер да Название должности
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список должностей созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/areas" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести должности, созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести должности, созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести должности, обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести должности, обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Статьи операций

Создание новой статьи операции

curl "https://app.synergycrm.ru/api/v1/invoice-payment-categories" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"invoice-payment-categories",
         "attributes":{
           "name":"Статья операции из API",
           "kind":"income"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/invoice-payment-categories");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"invoice-payment-categories\",\"attributes\":{\"name\":\"Статья операции из API\",\"kind\":\"income\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/invoice-payment-categories')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"invoice-payment-categories",
         "attributes":{
           "name":"Статья операции из API",
           "kind":"income"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"invoice-payment-categories",
         "attributes":{
           "name":"Статья операции из API",
           "kind":"income"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/invoice-payment-categories", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/invoice-payment-categories',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"invoice-payment-categories",
         "attributes":{
           "name":"Статья операции из API",
           "kind":"income"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/invoice-payment-categories"

payload = json.dumps({
       "data":{
         "type":"invoice-payment-categories",
         "attributes":{
           "name":"Статья операции из API",
           "kind":"income"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/invoice-payment-categories'));
  request.body = json.encode({
       "data":{
         "type":"invoice-payment-categories",
         "attributes":{
           "name":"Статья операции из API",
           "kind":"income"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type invoice-payment-categories
URL /api/v1/invoice-payment-categories
Список GET /api/v1/invoice-payment-categories
Чтение GET /api/v1/invoice-payment-categories/{id}
Создание POST /api/v1/invoice-payment-categories
Редактирование PATCH /api/v1/invoice-payment-categories/{id}
Удаление DELETE /api/v1/invoice-payment-categories/{id}

Атрибуты

Атрибуты статтьи операции

{
  "data": {
      "type":"invoice-payment-categories",
      "id":"1",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Счет",
        "kind": "outcome"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Холодные звонки да Имя статьи операции
kind* string income да Тип статьи операции. Может быть только трёх значений: income, outcome и transfer
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список статей операций созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/invoice-payment-categories" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/invoice-payment-categories?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/invoice-payment-categories?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/invoice-payment-categories?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/invoice-payment-categories?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/invoice-payment-categories?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/invoice-payment-categories?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести статьи операций созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести статьи операций созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести статьи операций обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести статьи операций обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Метки задач

Создание новой метки

curl "https://app.synergycrm.ru/api/v1/labels" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"labels",
         "attributes":{
           "name":"Метка задачи",
           "color":"#266ca6",
           "kind":"diaries"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/labels");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"labels\",\"attributes\":{\"name\":\"Метка задачи\",\"color\":\"#266ca6\",\"kind\":\"diaries\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/labels')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"labels",
         "attributes":{
           "name":"Метка задачи",
           "color":"#266ca6",
           "kind":"diaries"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"labels",
         "attributes":{
           "name":"Метка задачи",
           "color":"#266ca6",
           "kind":"diaries"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/labels", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/labels',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"labels",
         "attributes":{
           "name":"Метка задачи",
           "color":"#266ca6",
           "kind":"diaries"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/labels"

payload = json.dumps({
       "data":{
         "type":"labels",
         "attributes":{
           "name":"Метка задачи",
           "color":"#266ca6",
           "kind":"diaries"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/labels'));
  request.body = json.encode({
       "data":{
         "type":"labels",
         "attributes":{
           "name":"Метка задачи",
           "color":"#266ca6",
           "kind":"diaries"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type labels
URL /api/v1/labels
Список GET /api/v1/labels
Чтение GET /api/v1/labels/{id}
Создание POST /api/v1/labels
Редактирование PATCH /api/v1/labels/{id}
Удаление DELETE /api/v1/labels/{id}

Атрибуты

Атрибуты метки задачи

{
  "data": {
      "type":"labels",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name":"Метка задачи",
        "color":"#266ca6",
        "kind":"diaries"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Метка задачи да Имя метки
color string #266ca6 да Цвет метки
kind string diaries да Объект метки
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Ограничения по значениям

Аттрибут Варианты
kind diaries

Фильтры

Получить список меток созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/labels" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/labels?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/labels?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/labels?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/labels?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/labels?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/labels?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
name Вывести метки с указанным именем filter[name]=Метка задачи
created-at-gte Вывести метки созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести метки созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести метки обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести метки обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Пользователи

Обновление номера телефона

curl "https://app.synergycrm.ru/api/v1/profile" \
  -X PATCH \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "id": 2,
         "type":"users",
         "attributes":{
           "phone":"+79876543211"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/profile");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("PATCH");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"id\": 2,\"type\":\"users\",\"attributes\":{\"phone\":\"+79876543211\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/profile')
req = Net::HTTP::Patch.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{       
  "data":{         
    "id": 2,         
    "type":"users",         
    "attributes":{           
      "phone":"+79876543211"         
      }       
    }     
  }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{       
  "data":{         
    "id": 2,         
    "type":"users",         
    "attributes":{           
      "phone":"+79876543211"         
      }       
    }     
  }`)
	req, err := http.NewRequest("PATCH", "https://app.synergycrm.ru/api/v1/profile", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/profile',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{       
  "data":{         
    "id": 2,         
    "type":"users",         
    "attributes":{           
      "phone":"+79876543211"         
      }       
    }     
  }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/profile"

payload = json.dumps({       
  "data":{         
    "id": 2,         
    "type":"users",         
    "attributes":{           
      "phone":"+79876543211"         
      }       
    }     
  })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/profile'));
  request.body = json.encode({       
  "data":{         
    "id": 2,         
    "type":"users",         
    "attributes":{           
      "phone":"+79876543211"         
      }       
    }     
  });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type users
URL /api/v1/users
Список GET /api/v1/users
Чтение GET /api/v1/users/{id}
Создание POST /api/v1/users
Редактирование PATCH /api/v1/users/{id}

Атрибуты

{
    "data": {
        "id": "2",
        "type": "users",
        "attributes": {
            "created-at": "2022-02-22T12:02:22.000+00:00",
            "updated-at": "2022-02-22T12:02:22.000+00:00",
            "cached-at": "2022-02-22T12:02:22.000+00:00",
            "email": "support@test.com",
            "first-name": "Иван",
            "last-name": "Иванов",
            "middle-name": "",
            "phone": "+79876543211",
            "custom-fields":{},
            "mail-signature": "",
            "address-coordinates": {
              "latitude": 55.78,
              "longitude": 37.64
            },
            "rights-config":{
              "edit-menu": true,
              "manage-articles": false,
              "edit-mail-accounts": false,
              "allow-work-with-kkm": false,
              "edit-entity-columns": true,
              "edit-entity-widgets": true,
              "allow-manual-dialing": true,
              "manage-work-schedules": true,
              "edit-entity-nested-forms": true,
              "edit-notification-settings": true,
              "manage-irresponsible-entity": false,
              "allow-cancel-completed-tasks": true
            },
            "disabled": false,
            "role": "executive",
            "avatar": "https://example.com/test.png",
            "last-sign-in-at": "2022-02-22T12:02:22.000+00:00",
            "current-sign-in-at": "2022-02-22T12:02:22.000+00:00",
            "unconfirmed-email": null,
            "web-form-token": "6abcff2aa1eea0f899e741a63a3d92a1",
            "time-zone": "Europe/Moscow",
            "locale": "ru",
            "online": false,
            "work-time-status":"true",
            "account-id": 2
        }
    }
}
Имя Тип Пример Запись Описание
first-name string Иван да Имя
last-name string Иванов да Фамилия
middle-name string Иванович да Отчество
email string test@mail.ru да Email
password string strongpswd да Пароль (обязателен при создании пользователя)
phone string +79876543211 да Телефон
mail-signature string С уважением да Подпись при отправке письма
address string Ленинский 15 да Адрес
address-coordinates json {"latitude": 55.78, "longitude": 37.64} да Координаты адреса: долгота и широта
rights-config json   да Дополнительные права пользователя
disabled boolean true да Статус актиности пользователя
role string basic, manager, executive да Основная роль пользователя
avatar string https://example.com/link/to/avatar.png нет Аватар пользователя
last-sign-in-at datetime   нет Дата предыдущей авторизации
current-sign-in-at datetime   нет Дата текущей авторизации
unconfirmed-email string changed@email.com нет Неподтвержденный адрес email
web-form-token string 12345beaf нет Токен для создания вебформы
time-zone string Tokyo нет Временная зона в формате tzdata
locale string ru, en нет Язык интерфейса системы
online boolean true нет Онлайн-статус (работает ли пользователь сейчас в системе?)
notification-settings json   нет Настройки уведомлений пользователя
work-time-status boolean true, false нет Рабочая сессия
created-at datetime 2022-02-22T12:02:22.000+00:00 да Дата создания
updated-at datetime 2022-02-22T12:02:22.000+00:00 нет Дата обновления

rights-config (Дополнительные права)

Запретим пользователю вводить номер телефона вручную

curl "https://app.synergycrm.ru/api/v1/users/10" \
  -X PATCH \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "id": 2,
         "type":"users",
         "attributes":{
           "rights-config":{
             "allow-manual-dialing": false
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/users/10");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("PATCH");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"id\": 2,\"type\":\"users\",\"attributes\":{\"rights-config\":{\"allow-manual-dialing\": false}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/users/10')
req = Net::HTTP::Patch.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "id": 2,
         "type":"users",
         "attributes":{
           "rights-config":{
             "allow-manual-dialing": false
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "id": 2,
         "type":"users",
         "attributes":{
           "rights-config":{
             "allow-manual-dialing": false
           }
         }
       }
     }`)
	req, err := http.NewRequest("PATCH", "https://app.synergycrm.ru/api/v1/users/10", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/users/10',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
       "data":{
         "id": 2,
         "type":"users",
         "attributes":{
           "rights-config":{
             "allow-manual-dialing": false
           }
         }
       }
     }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/users/10"

payload = json.dumps({
       "data":{
         "id": 2,
         "type":"users",
         "attributes":{
           "rights-config":{
             "allow-manual-dialing": false
           }
         }
       }
     })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/users/10'));
  request.body = json.encode({
       "data":{
         "id": 2,
         "type":"users",
         "attributes":{
           "rights-config":{
             "allow-manual-dialing": false
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Название Описание
edit-menu Может ли пользователь редактировать видимость и порядок элементов меню
manage-articles Возможность редактировать базу знаний
edit-mail-accounts Внесение изменений в настройки почтовых аккаунтов
allow-work-with-kkm Разрешить работать с онлайн-кассами (ККМ)
edit-entity-columns Разрешить менять видимость колонок в таблицах объектов
edit-entity-widgets Разрешить менять видимость виджетов в карточках объектов
allow-manual-dialing Разрешить вводить номер телефона вручную (при совершении звонка)
manage-work-schedules Управление рабочим графиком
edit-entity-nested-forms Редактирование полей в форме для вложенных объектов
edit-notification-settings Редактирование параметров оповещений
manage-irresponsible-entity Управлять сущностями без ответственных юзеров
allow-cancel-completed-tasks Разрешить отмену завершенных задач

Связи

Пример данных

{
  "data": {
    "type":"users",
    "id":"2",
    "relationships":{
      "custom-role":{
        "links":{
          "self":"/api/v1/users/2/relationships/custom-role",
          "related":"/api/v1/users/2/custom-role"
        }
      },
      "work-position":{
        "links":{
          "self":"/api/v1/users/2/relationships/work-position",
          "related":"/api/v1/users/2/work-position"
        }
      }
    }
  }
}

Назчение пользователю новой дополнительной роли

curl "https://app.synergycrm.ru/api/v1/users/10" \
  -X PATCH \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "id": 2,
         "type":"users",
         "relationships":{
           "custom-role":{
             "data":{
               "type":"custom-roles",
               "id":2
             }
           }
         }
       }
     }
EOF

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Дополнительная роль custom-role custom-roles
Должность work-position work-positions
Группа user-group user-groups

Фильтры

Получить список сотрудников по активной рабочей сессии

curl -G "https://app.synergycrm.ru/api/v1/users/?filter[work-time-status]=active" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/users/?filter[work-time-status]=active");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/users/?filter[work-time-status]=active')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/users/?filter[work-time-status]=active", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/users/?filter[work-time-status]=active',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/users/?filter[work-time-status]=active"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/users/?filter[work-time-status]=active'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести пользователей созданных после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести пользователей созданных до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести пользователей обновлённых после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести пользователей обновлённых до указанного времени filter[updated-at-lte]=2022.02.22 12:00
q Вывести пользователей по поисковому запросу filter[q]=some-query
work-time-status Вывести пользователей по рабочей сессии filter[work-time-status]=active, filter[work-time-status]=inactive

Вебхуки

Раздел системы: Настройки -> Автоматизации -> Сценарии

С помощью вебхуков вы можете отправить информацию об объекте автоматизации на указанный адрес.

Объектом автоматизации может быть сделка, заявка, почтовое сообщение, компания или контакт.

Структура JSON

Структура JSON

{
  "type": "Deal",
  "timestamp": 1519466739,
  "data": {
    "id": 2
  },
  "custom_fields": {
    "custom_1": "Свое поле №1"
  }
}

Информация об объекте представлена в формате JSON. Каждый объект JSON имеет следующие поля:

type - тип объекта. может быть Deal, Order, Company, Contact, MailMessage

timestamp - дата срабатывания автоматизации. Может не совпадать с временем отправки в том случае если сообщение было отправлено повторно (например, адрес указанный для вебхука недоступен или возвращает ошибку).

data - вся информация по объекту

custom_fields - база данных с сопоставлением имен своих полей и сгенерированных имен системой

Сделки

{
  "type": "Deal",
  "timestamp": 1519466985,
  "data": {
    "id": 22222,
    "name": "Сделка",
    "description": "Описание сделки",
    "note": "Текст заметки по сделке",
    "amount": "2.0",
    "cost": "2.0",
    "finished_at": null,
    "planned_at": null,
    "created_at": "02.02.2022 22:22:22",
    "updated_at": "02.02.2022 22:22:22",
    "user_id": 2,
    "user": "Имя пользователя",
    "responsible_id": 2,
    "responsible": "Имя пользователя",
    "stage_id": 222,
    "stage": "В работе",
    "stage_category_id": 2,
    "stage_category": "Партнеры",
    "status_id": 2,
    "status": "Переговоры",
    "source_id": 2,
    "source": "Вебсайт",
    "area_id": 2,
    "area": "Москва",
    "loss_reason_id": null,
    "loss_reason": "",
    "loss_competitor_id": null,
    "loss_competitor": "",
    "company_id": null,
    "company": "",
    "contact_id": null,
    "contact": "",
    "custom_5808": [],
    "custom_10535": [],
    "custom_11906": []
  },
  "custom_fields": {
    "custom_5808": "Значение из поля 1",
    "custom_10535": "Значение из поля 2",
    "custom_11906": "Значение из поля 3"
  }
}
Атрибут Описание
id ID объекта
name Название
description Описание
note Заметка
amount Цена
cost Себестоимость
finished_at Фактическая дата закрытия
planned_at Планируемая дата закрытия
created_at Дата создания
updated_at Дата последнего обновления
user_id Создатель (ID)
user Создатель (ФИО)
responsible_id Ответственный (ID)
responsible Ответственный (ФИО)
stage_id Этап (ID)
stage Этап (название)
stage_category_id Воронка (ID)
stage_category Воронка (название)
status_id Статус (ID)
status Статус (название)
source_id Источник (ID)
source Источник (название)
area_id Территория (ID)
area Территория (название)
loss_reason_id Причина поражения (ID)
loss_reason Причина поражения (название)
loss_competitor_id Конкурент поражения (ID)
loss_competitor Конкурент поражения (название)
company_id Компания (ID)
company Компания (название)
contact_id Контакт (ID)
contact Контакт (ФИО)
custom_{id} Свои поля

Заявки

{
  "type": "Order",
  "timestamp": 1519556577,
  "data": {
    "id": 22222,
    "name": "Заявка",
    "description": "Описание заявки",
    "note": null,
    "amount": "2.0",
    "cost": "2.0",
    "created_at": "02.02.2022 22:22:22",
    "updated_at": "02.02.2022 22:22:22",
    "user_id": 2,
    "user": "Имя пользователя",
    "responsible_id": null,
    "responsible": "",
    "stage_id": 2,
    "stage": "Проиграна",
    "status_id": 2,
    "status": "Отказ",
    "source_id": 2,
    "source": "Вебсайт",
    "loss_reason_id": 2,
    "loss_reason": "Ушел к конкуренту",
    "loss_competitor_id": 2,
    "loss_competitor": "ООО Компания конкурент",
    "company_id": 2,
    "company": "ООО Клиент",
    "contact_id": 2,
    "contact": "Иванов Иван Иванович",
    "custom_26": "",
    "custom_27": "",
    "custom_130": "",
    "custom_12239": []
  },
  "custom_fields": {
    "custom_26": "Значение из поля 1",
    "custom_27": "Значение из поля 2",
    "custom_130": "Значение из поля 3",
    "custom_12239": "Значение из поля 4"
  }
}
Атрибут Описание
id ID объекта
name Название
description Описание
note Заметка
amount Цена
cost Себестоимость
finished_at Фактическая дата закрытия
planned_at Планируемая дата закрытия
created_at Дата создания
updated_at Дата последнего обновления
user_id Создатель (ID)
user Создатель (ФИО)
responsible_id Ответственный (ID)
responsible Ответственный (ФИО)
stage_id Этап (ID)
stage Этап (название)
status_id Статус (ID)
status Статус (название)
source_id Источник (ID)
source Источник (название)
loss_reason_id Причина поражения (ID)
loss_reason Причина поражения (название)
loss_competitor_id Конкурент поражения (ID)
loss_competitor Конкурент поражения (название)
company_id Компания (ID)
company Компания (название)
contact_id Контакт (ID)
contact Контакт (ФИО)
custom_{id} Свои поля

Компании

{
  "type": "Company",
  "timestamp": 1519556956,
  "data": {
    "name": "ООО Синергия Софт",
    "general_phone": "+79876543211",
    "work_phone": "+79876543211",
    "other_phone": "+79876543211",
    "fax": "+79876543211",
    "email": "email@mail.ru",
    "other_email": "email@mail.com",
    "website": "synergycrm.ru",
    "description": "Разработка компьютерного программного обеспечения",
    "note": "Заметка по компании",
    "inn": "0101010101",
    "full_name": "Общество с ограниченной ответственностью Синергия Софт",
    "short_name": "ООО Синергия Софт",
    "ogrn": "0101010101010",
    "kpp": "010101010",
    "okved": "62.01",
    "manager_name": "Сидоров В.В.",
    "manager_position": "Генеральный директор",
    "lawfulness_base": null,
    "accountant": "Иванов И.И.",
    "country": "Россия",
    "address": "Университетская ул, д. 7, помещ. 503",
    "region": "Республика Татарстан",
    "city": "Иннополис",
    "street": "Университетская",
    "house": "1",
    "flat": null,
    "zip_code": "22222-0000",
    "juristic_country": "Россия",
    "juristic_region": "Республика Татарстан",
    "juristic_city": "Иннополис",
    "juristic_zip-code": "22222-0000",
    "juristic_street": "Университетская",
    "juristic_house": "1",
    "juristic_build": "1",
    "juristic_office": "1",
    "actual_country": "Россия",
    "actual_region": "Республика Татарстан",
    "actual_city": "Иннополис",
    "actual_zip-code": "22222-0000",
    "actual_street": "ул. Университетская",
    "actual_house": "22а",
    "actual_build": "2",
    "actual_office": "123",
    "mailing_country": "Россия",
    "mailing_region": "Республика Татарстан",
    "mailing_city": "Иннополис",
    "mailing_zip-code": "22222-0000",
    "mailing_street": "Университетская",
    "mailing_house": "1",
    "mailing_build": "1",
    "mailing_office": "1",
    "created_at": "22.02.2022 12:22:22",
    "updated_at": "22.02.2022 12:22:22",
    "user_id": 222,
    "user": "Имя пользователя",
    "responsible_id": null,
    "responsible": "",
    "source_id": 2,
    "source": "Вебсайт",
    "status_id": 2,
    "status": "Работает",
    "type_id": 2,
    "type": "Партнер",
    "custom_1": "Значение"
  },
  "custom_fields": {
    "custom_1": "Значение"
  }
}
Атрибут Описание
name Название
general_phone Осн. тел.
work_phone Раб. тел.
other_phone Доп. тел.
fax Факс
email E-mail
other_email Доп. e-mail
website Вебсайт
description Описание
note Заметка
inn ИНН
full_name Полн. наименование
short_name Сокр. наименование
ogrn ОГРН
kpp КПП
okved ОКВЭД
manager_name ФИО рук-ля
manager_position Должность рук-ля
lawfulness_base Правомочность
accountant Гл.бухгалтер
country Страна
address Адрес
region Регион
city Город
street Улица
house Дом
flat Офис/Квартира
zip_code Индекс
juristic_country Юр. страна
juristic_region Юр. регион
juristic_city Юр. город
juristic_zip_code Юр. индекс
juristic_street Юр. улица
juristic_house Юр. дом
juristic_build Юр. строение
juristic_office Юр. офис
actual_country Факт. страна
actual_region Факт. регион
actual_city Факт. город
actual_zip_code Факт. индекс
actual_street Факт. улица
actual_house Факт. дом
actual_build Факт. корпус
actual_office Факт. офис
mailing_country Почт. страна
mailing_region Почт. регион
mailing_city Почт. город
mailing_zip_code Почт. индекс
mailing_street Почт. улица
mailing_house Почт. дом
mailing_build Почт. строение
mailing_office Почт. офис
created_at Создано
updated_at Обновлено
user_id Создатель (ID)
user Создатель
responsible_id Ответственный (ID)
responsible Ответственный
source_id Источник (ID)
source Источник
status_id Статус (ID)
status Статус
type_id Тип (ID)
type Тип
custom_{id} Свои поля

Контакты

{
  "type": "Contact",
  "timestamp": 1519557678,
  "data": {
    "name": "Lastname Firstname Middlename",
    "position": "lll",
    "first_name": "Firstname",
    "last_name": "Lastname",
    "middle_name": "Middlename",
    "mobile_phone": null,
    "general_phone": null,
    "work_phone": null,
    "other_phone": null,
    "email": "llll@llll.lll",
    "other_email": null,
    "description": "basic",
    "note": null,
    "fax": null,
    "website": null,
    "created_at": "27.12.2017 10:00:11",
    "updated_at": "27.12.2017 10:00:11",
    "work_country": null,
    "work_region": null,
    "work_city": null,
    "work_zipcode": null,
    "work_street": null,
    "work_building": null,
    "work_housing": null,
    "work_apartment": null,
    "home_country": null,
    "home_region": null,
    "home_city": null,
    "home_zipcode": null,
    "home_street": null,
    "home_building": null,
    "home_housing": null,
    "home_apartment": null,
    "vkontakte": null,
    "facebook": null,
    "linkedin": null,
    "odnoklassniki": null,
    "instagram": null,
    "twitter": null,
    "whatsapp": null,
    "viber": null,
    "telegram": null,
    "skype": null,
    "responsible_id": 2,
    "responsible": "Яковлевски Эндрю",
    "user_id": 2,
    "user": "Яковлевски Эндрю",
    "status_id": null,
    "status": "",
    "type_id": 19975,
    "type": "Регистрация",
    "source_id": null,
    "source": ""
  },
  "custom_fields": {}
}
Атрибут Описание
name ФИО
position Должность
first_name Имя
last_name Фамилия
middle_name Отчество
mobile_phone Моб. тел.
general_phone Осн. тел.
work_phone Раб. тел.
other_phone Доп. тел.
email E-mail
other_email Доп. e-mail
description Описание
note Заметка
fax Факс
website Вебсайт
created_at Создано
updated_at Изменено
work_country Раб. страна
work_region Раб. регион
work_city Раб. город
work_zipcode Раб. индекс
work_street Раб. улица
work_building Раб. дом
work_housing Раб. корпус
work_apartment Раб. офис
home_country Дом. страна
home_region Дом. регион
home_city Дом. город
home_zipcode Дом. индекс
home_street Дом. улица
home_building Дом. дом
home_housing Дом. корпус
home_apartment Дом. квартира
vkontakte VK
facebook Facebook
linkedin LinkedIn
odnoklassniki Одноклассники
instagram Instagram
twitter Twitter
whatsapp WhatsApp
viber Viber
telegram Telegram
skype Skype
responsible_id Ответственный (ID)
responsible Ответственный
user_id Создатель (ID)
user Создатель
status_id Status (ID)
status Статус
type_id Тип (ID)
type Тип
source_id Источник (ID)
source Источник

Почтовые сообщения

{
  "type": "MailMessage",
  "timestamp": 1519557828,
  "data": {
    "from": [
      {
        "name": "Иван Иванов",
        "address": "ivanov@mail.ru"
      }
    ],
    "to": [
      {
        "name": "Иван Сидоров",
        "address": "sidorov@mail.ru"
      }
    ],
    "subject": "Тема письма",
    "message_id": "<00000000000000@web52g.mail.ru>",
    "body": "<div>Здравствуйте!</div><br /><span lang=\"ru\">Тут текст сообщения</span>",
    "direction": "outgoing",
    "replied_at": null,
    "forwarded_at": null,
    "created_at": "22.02.2022 12:22:22",
    "folder_id": 2,
    "folder": "Отправленные",
    "label_id": 2,
    "label": "Реклама",
    "responsible_id": 2,
    "responsible": "Имя ответственного",
    "creator_id": 2,
    "creator": "Иван Иванов"
  }
}
Атрибут Описание
from От кого
to Кому
subject Тема
message_id MessageID у почтового провайдера
body Сообщение
direction Тип (outgoing - исходящее, incoming - входящее)
replied_at Отвечено
forwarded_at Переслано
created_at Создано
folder_id Папка (ID)
folder Папка
label_id Метка (ID)
label Метка
responsible_id Ответственный (ID)
responsible Ответственный
creator_id Создатель (ID)
creator Создатель

Телефонные звонки

{
   "type": "TelephonyCall",
   "data": {
      "id": 22222,
      "direction": "outgoing",
      "call_id": "out_a07d018ea75be3b71087e99072b43497f5fe7342",
      "dst_phone_number": "+79876543211",
      "src_phone_number": "222",
      "number": 22222,
      "tech_code": null,
      "duration": null,
      "started_at": "22.02.2022 12:22:22",
      "answered_at": null,
      "completed_at": null,
      "created_at": "22.02.2022 12:22:22",
      "updated_at": "22.02.2022 12:22:22",
      "status_id": 2,
      "status": "Неотвечено",
      "custom_42199": null,
      "custom_48153": [ ],
      "custom_42198": null
   },
   "timestamp":1572421245
}
Атрибут Описание
id ID
direction Направление
call_id ID выданный на АТС
dst_phone_number Кому
src_phone_number От кого
number Номер
tech_code Тех. код
duration Длительность
started_at Время начала
answered_at Время ответа
completed_at Время завершения
created_at Время создания
updated_at Время последнего обновления
status_id ID статуса
status Статус
custom_* Свои поля

Активности

Чтение активности с предустановленным ресурсом контакта

curl "https://app.synergycrm.ru/api/v1/activities" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[trackable-type]=contacts"
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/activities");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("filter[trackable-type]=contacts");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/activities')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = 'filter[trackable-type]=contacts'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`filter[trackable-type]=contacts`)
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/activities", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/activities?filter[trackable-type]=contacts',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/activities?filter[trackable-type]=contacts"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/activities?filter[trackable-type]=contacts'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Создание примечания с предустановленным ресурсом контакта и подтверждением прочтения

curl "https://app.synergycrm.ru/api/v1/activities" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"activities",
         "attributes":{
           "key":"message",
           "message":"Hello!",
           "confirm-read":true,
           "user-ids":[1, 2, 3]
         },
         "relationships":{
           "trackable":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/activities");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"activities\",\"attributes\":{\"key\":\"message\",\"message\":\"Hello!\",\"confirm-read\":true,\"user-ids\":[1, 2, 3]},\"relationships\":{\"trackable\":{\"data\":{\"type\":\"contacts\",\"id\":\"2\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/activities')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"activities",
         "attributes":{
           "key":"message",
           "message":"Hello!",
           "confirm-read":true,
           "user-ids":[1, 2, 3]
         },
         "relationships":{
           "trackable":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"activities",
         "attributes":{
           "key":"message",
           "message":"Hello!",
           "confirm-read":true,
           "user-ids":[1, 2, 3]
         },
         "relationships":{
           "trackable":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/activities", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/activities',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"activities",
         "attributes":{
           "key":"message",
           "message":"Hello!",
           "confirm-read":true,
           "user-ids":[1, 2, 3]
         },
         "relationships":{
           "trackable":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           }
         }
       }
     }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/activities"

payload = json.dumps({
       "data":{
         "type":"activities",
         "attributes":{
           "key":"message",
           "message":"Hello!",
           "confirm-read":true,
           "user-ids":[1, 2, 3]
         },
         "relationships":{
           "trackable":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           }
         }
       }
     })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/activities'));
  request.body = json.encode({
       "data":{
         "type":"activities",
         "attributes":{
           "key":"message",
           "message":"Hello!",
           "confirm-read":true,
           "user-ids":[1, 2, 3]
         },
         "relationships":{
           "trackable":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Изменение существующего примечания

curl "https://app.synergycrm.ru/api/v1/activities/2" \
  -X PATCH \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"activities",
         "attributes":{
           "key":"message",
           "message":"New text",
           "user-ids":[1, 2]
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/activities/2");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("PATCH");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"activities\",\"attributes\":{\"key\":\"message\",\"message\":\"New text\",\"user-ids\":[1, 2]}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/activities/2')
req = Net::HTTP::Patch.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"activities",
         "attributes":{
           "key":"message",
           "message":"New text",
           "user-ids":[1, 2]
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"activities",
         "attributes":{
           "key":"message",
           "message":"New text",
           "user-ids":[1, 2]
         }
       }
     }`)
	req, err := http.NewRequest("PATCH", "https://app.synergycrm.ru/api/v1/activities/2", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/activities/2',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"activities",
         "attributes":{
           "key":"message",
           "message":"New text",
           "user-ids":[1, 2]
         }
       }
     }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/activities/2"

payload = json.dumps({
       "data":{
         "type":"activities",
         "attributes":{
           "key":"message",
           "message":"New text",
           "user-ids":[1, 2]
         }
       }
     })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/activities/2'));
  request.body = json.encode({
       "data":{
         "type":"activities",
         "attributes":{
           "key":"message",
           "message":"New text",
           "user-ids":[1, 2]
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type activities
URL /api/v1/activities
Список GET /api/v1/activities
Чтение GET /api/v1/activities/{id}
Создание POST /api/v1/activities
Редактирование PATCH /api/v1/activities/{id}
Удаление DELETE /api/v1/activities/{id}

Атрибуты

Атрибуты активности

{
    "data": {
      "type":"activities",
      "id":"2",
      "attributes":{
        "created-at": "2022-02-22T12:02:22.222+03:00",
        "updated-at": "2022-02-22T12:02:22.222+03:00",
        "key": "create",
        "confirm-read": null,
        "user-ids": [1, 2, 3],
        "message": "",
        "parameters":{
          "changes" : {
            "Id" : {
                "new_name" : 22,
                "old_name" : null,
                "field" : "id"
            },
            "Создатель" : {
                "old_id" : null,
                "new_name" : "Иван Иванов",
                "new_id" : 2,
                "old_name" : "",
                "field" : "user_id"
            },
            "Сотрудник" : {
                "new_id" : 2,
                "old_name" : "",
                "field" : "responsible_id",
                "new_name" : "Иван Иванов",
                "old_id" : null
            },
            "Тема" : {
                "new_name" : "test",
                "field" : "name",
                "old_name" : null
            }
          },
          "creator" : "Иван Иванов",
          "object" : "",
          "this" : "test"
        }
      }
   }
}

Основные атрибуты

Имя Тип Пример Запись Описание    
key string Иван да Тип активности    
parameters json {"editor":"Иван"} нет Параметры активности (изменения/описание события)    
user-ids array [1, 2, 3] да Упомянутые пользователи    
confirm-read boolean|string true '1' null да Уведомлять или нет упомянутых пользователей (только создание)
message string Текст нет Текст примечания    

Связи

Пример данных (перечислены не все связи)

{
    "data": {
      "type":"activities",
      "id":"2",
      "relationships":{
        "trackable":{
          "links":{
            "self":"/api/v1/activities/2/relationships/trackable",
            "related":"/api/v1/activities/2/trackable"
          }
        },
        "user":{
          "links":{
            "self":"/api/v1/activities/2/relationships/user",
            "related":"/api/v1/activities/2/user"
          }
        }
      }
   }
}

Пример запроса с загруженными автором изменения и изменённым объектом

curl "https://app.synergycrm.ru/api/v1/activities?include=user,trackable" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/activities?include=user,trackable");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/activities?include=user,trackable')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/activities?include=user,trackable", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/activities?include=user,trackable',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/activities?include=user,trackable"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/activities?include=user,trackable'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Объект активности trackable companies, contacts, deals, entries, orders, diaries, products, estate-properties, users, invoices, invoice-payments
Автор активности user users

Фильтры

Получить список активностей определённого пользователя

curl -G "https://app.synergycrm.ru/api/v1/activities" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[user_id]=2"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/activities?filter[user_id]=2");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/activities?filter[user_id]=2')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/activities?filter[user_id]=2", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/activities?filter[user_id]=2',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/activities?filter[user_id]=2"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/activities?filter[user_id]=2'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Получить список активностей по определённой компании

curl -G "https://app.synergycrm.ru/api/v1/activities?filter[trackable_type]=companies" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[trackable_id]=2222"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/activities?filter[trackable_type]=companies&filter[trackable_id]=2222");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/activities?filter[trackable_type]=companies&filter[trackable_id]=2222')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/activities?filter[trackable_type]=companies&filter[trackable_id]=2222", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/activities?filter[trackable_type]=companies&filter[trackable_id]=2222',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/activities?filter[trackable_type]=companies&filter[trackable_id]=2222"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/activities?filter[trackable_type]=companies&filter[trackable_id]=2222'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
trackable_type* Вывести активности по определённому типу ресурса filter[trackable_type]=contacts
trackable_id Вывести активности по идентификатору объекта filter[trackable_id]=222
key** Вывести активности по определённому типу события filter[key]=create
user_id Вывести активности по определённому пользователю filter[user_id]=2
q Вывести активности по поисковому запросу filter[q]=some-query

* Возможные значения: companies, contacts, deals, entries, orders, diaries, products, estate-properties, users, invoices, invoice-payments.
** Возможные значения: sms_sent, restore, create_invoice, create_invoice_payment, import, diary_action, archive, update, destroy, create.

Параметры

Источник запроса и сценарии автоматизаций

{
  "source_id": 2,
  "source_type": "api",
  "source_name": "Test API Key",
  "scenario_id": 22,
  "scenario_name": "Автоматизация на закрытие сделок"
}

У всех типов активностей могут быть указаны поля, указывающие на источник запроса. Источником может быть api, мобильное приложение, пользовательские приложения или чат.

Если поля не указаны или null, значит запрос поступил через интерфейс Synergy CRM.

Поле Описание
source_type Тип источника запроса, возможные варианты: api, app, mobile, chat
source_id ID источника запроса, в зависимости от типа может быть id api-ключа или id приложения
source_name Имя приложения, либо название api-ключа

Аналогично источнику запросов, в параметрах может содержаться информация о сценарии автоматизации, который взаимодействовал с объектом:

Поле Описание
scenario_id ID сценария автоматизации
scenario_name Название сценария автоматизации

Создание, обновление и удаление (create, update, destroy)

{
   "changes" : {
      "Фамилия" : {
         "field" : "last_name",
         "new_name" : "Иванов",
         "old_name" : null
      },
      "ID" : {
         "field" : "id",
         "old_name" : null,
         "new_name" : 2222
      },
      "Ответственный" : {
         "field" : "responsible_id",
         "old_id" : null,
         "old_name" : "",
         "new_name" : "Лазарев Александр",
         "new_id" : 222
      },
      "Создатель" : {
         "new_id" : 222,
         "new_name" : "Лазарев Александр",
         "old_name" : "",
         "old_id" : null,
         "field" : "user_id"
      }
   },
   "object" : "",
   "this" : "Test",
   "creator" : "Лазарев Александр"
}
Поле Описание
changes Содержит информацию с изменениями полей объекта
object Имя объекта
creator Имя автора активности
this Имя объекта

Поля элементов в changes

Именем является наименование поля в самой системе

Поле Описание
field Системное наименование поля
old_id Идентификатор старого связанного объекта
old_name Наименование старого привязанного объекта
new_id Идентификатор нового привязанного объекта
new_name Имя интеграции

Импорт (import)

{
  "object" : "Contact",
  "creator" : "Иванов Иван",
  "imported_count" : 2
}
Поле Описание
object Класс импортируемых объектов
creator Имя автора активности
imported_count Количество импортированных объектов

Экспорт (export)

{
  "mode": "background",
  "object": "Diary",
  "creator": "Владимир Владимирович",
  "exported_count": 2,
  "operation_name": "Экспорт \"Задачи\"",
  "operation_status": "completed",
  "operation_progress": 0
}
Поле Описание
mode Режим экспорта
object Класс экспортируемых объектов
creator Имя автора активности
exported_count Количество экспортированных объектов
operation_name Название операции
operation_status Статус операции
operation_progress Прогресс операции в процентах

Архивирование и восстановление из архива (archive, restore)

{
  "this": "Сделка №2",
  "creator": "Иванов Иван"
}
Поле Описание
this Имя объекта
creator Имя автора активности

Примечание (message)

{
  "users": [1, 2, 3],
  "confirm-read": true
}
Поле Описание
users Упомянутые пользователи, см. user-ids в атрибутах
confirm-read Уведомлять о прочтении, см. confirm-read в атрибутах

Создание счета (create_invoice)

{
  "deal" : "Сделка №2",
  "amount" : "2222.0",
  "number" : 2,
  "object": "ООО Хорошая Компания",
  "creator" : "Иванов Иван"
}
Поле Описание
number Номер счета
deal Имя сделки
creator Имя автора активности
amount Сумма платежа
object Имя объекта

Создание платежа (create_invoice_payment)

{
  "deal" : "Сделка №2",
  "payer" : "Петров Владимир",
  "creator" : "Иванов Андрей",
  "receiver" : "ООО \"Хорошая компания\"№22",
  "direction" : "income",
  "invoice_number" : 222,
  "payment_number" : 22222,
  "payer_bank_detail" : null,
  "receiver_bank_detail" : "ФИЛИАЛ № 2 БАНКА"
}
Поле Описание
deal Имя сделки
payer Имя или название плательщика
creator Имя автора активности
receiver Имя или название получателя
direction Направление платежа
invoice_number Номер счета
payment_number Номер платежа
payer_bank_detail Реквизиты плательщика
receiver_bank_detail Реквизиты получателя

Отправка СМС (sms_sent)

{
  "dst": "+7 987 654-32-11",
  "entity": "Иван Иванов",
  "creator": "Владимир Владимирович",
  "message": "Уведомление о готовом решении",
  "integration": "SigmaSMS"
}
Поле Описание
dst Номер, на который СМС была выслана
entity Имя объекта
creator Имя автора активности
message Содержимое СМС
integration Имя интеграции

Новые связи и удаление связей (add_association, remove_association)

{
  "this": "ООО Хорошая Компания",
  "creator": "Владимир Владимирович",
  "associations": {
    "10": "Иван Иванов",
    "12": "Михаил Иванов"
  },
  "association_class": "Contact"
}
Поле Описание
this Имя объекта
creator Имя автора активности
associations Объекты
association_class Тип объектов

Сообщение чата (create_chat_message)

{
  "author": "Владимир Владимирович",
  "message": "Привет!",
  "user_avatar": "https://picsum.photos/id/1/200/200",
  "conversation_id": 2,
  "conversation_name": "Владимир Владимирович"
}
Поле Описание
author Имя автора сообщения
message Текст сообщения
user_avatar Ссылка на аватар
conversation_id id диалога
conversation_name Название диалога

Новый чеклист / элемент чеклиста (create_checklist)

{
  "this": "Чеклист",
  "object": "Задача №2",
  "creator": "Владимир Владимирович"
}
Поле Описание
this Имя чеклиста/задачи
object Имя объекта
creator Имя автора активности

Действие чеклиста (entity_checklist_item_action)

{
  "mode": "finish",
  "this": "Элемент чеклиста",
  "entity": "deal",
  "object": "Сделка №2",
  "creator": "Владимир Владимирович"
}
Поле Описание
this Имя задачи чеклиста
object Имя объекта
creator Имя автора активности
mode Действие
entity Тип сущности

Табличные фильтры

JSON API type table-states
URL /api/v1/table-states
Список GET /api/v1/table-states
Чтение GET /api/v1/table-states/{id}
Создание POST /api/v1/table-states/
Обновление PATCH /api/v1/table-states/{id}
Удаление DELETE /api/v1/table-states/{id}

Атрибуты (Список/чтение)

Ниже приведен пример формата данных, в реальном ответе будут присутствовать все перечисленные атрибуты

{
    "data": {
        "id": "2",
        "type": "table-states",
        "attributes": {
            "created-at": "2022-02-22T12:22:22.222+03:00",
            "updated-at": "2022-02-22T12:22:22.222+03:00",
            "class-name": "Company",
            "name": "company-table-filter",
            "key": "general",
            "temp": "true",
            "data": {
                "fields": [
                    "name",
                    "bank_number",
                    "email",
                    "city",
                    "responsible",
                    "contacts",
                    "street",
                    "custom_2"
                ],
                "search_conditions": {
                    "city": "Moscow"
                }
            }
        }
    }
}

Основные атрибуты

Имя Тип Пример Запись Описание
name string "company-table-filter" да Название фильтра
class-name string "Company" да Класс фильтра
key string "general" да Ключ таблицы ("general" - основная таблица, "contacts" - таблица карточки Контакты)
temp boolean "true" да Флаг, сигнализирующий о том, что данные поля используются в текущий момент
data hash {"fields": ["number", "created_at"} да Отображаемые поля и условия выборки
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список табличных фильтров из карточки Сделок

curl -G "https://app.synergycrm.ru/api/v1/table-states" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[key]=deals"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/table-states?filter[key]=deals");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/table-states?filter[key]=deals')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/table-states?filter[key]=deals", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/table-states?filter[key]=deals',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/table-states?filter[key]=deals"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/table-states?filter[key]=deals'));

  request.headers.addAll(headers);

  http.StreamedResponse response = await request.send();

  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
key Вывести табличные фильтры по определенному ключу filter[key]=general
class-name Вывести табличные фильтры по определенному классу filter[class-name]=Deals
temp Вывести табличные фильтры с текущими полями filter[temp]=true

Атрибуты (создание/обновление)

Ниже приведен пример формата данных, в реальном ответе будут присутствовать все перечисленные атрибуты

{
    "data": {
        "id": "2",
        "type": "table-states",
        "links": {
		    "self": "https://app.synergycrm.ru/api/v1/table-states/1"
	    },
        "attributes": {
            "created-at": "2022-02-22T12:22:22.222+03:00",
            "updated-at": "2022-02-22T12:22:22.222+03:00",
		    "cached-at": "2022-02-22T12:22:22.222+03:00",
            "class-name": "Company",
            "name": "company-table-filter",
            "key": "general",
            "temp": "true",
            "data": {
                "fields": [
                    "name",
                    "bank_number",
                    "email",
                    "city",
                    "responsible",
                    "contacts",
                    "street",
                    "custom_2"
                ],
                "search_conditions": {
                    "city": "Moscow"
                },
                "order_conditions": {
		          "created_at": "desc"
		        },
		        "search_conditions": {
		          "age": "",
		          "website": "only_null"
		        },
		        "group_conditions": {}
		    },
			"color": "#383e94",
			"search-conditions": {
				"age": "",
				"website": "only_null"
			},
			"order-conditions": {
				"created_at": "desc"
			},
			"group-conditions": {},
			"fields": [
				"name",
				"bank_number",
				"email",
				"city",
				"responsible",
				"contacts",
				"street",
				"custom_2"
			]
		}
    }
}

Создать табличный фильтр пример на CURL

curl -X "POST" "https://app.synergycrm.ru/api/v1/table-states" \
     -H 'Authorization: Bearer api_token' \
     -H 'Content-Type: application/vnd.api+json' \
     -d $'{
  "data": {
    "type": "table_states",
    "attributes": {
      "fields": [
        "name"
      ],
      "color": "hsl(236,+45%,+40%)",
      "search-conditions": {
        "name": "only_null"
      },
      "order-conditions": {
        "created_at": "desc"
      },
      "class-name": "Company",
      "group-conditions": {},
      "name": "Новый фильтр"
    }
  }
}'

Обновить табличный фильтр пример на CURL

curl -X "PATCH" "http://localhost:3000/api/v1/table-states/{id}" \
     -H 'Authorization: Bearer api_token' \
     -H 'Content-Type: application/vnd.api+json' \
     -d $'{
  "data": {
    "type": "table_states",
    "attributes": {
      "fields": [
        "name",
        "street"
      ],
      "color": "hsl(236,+45%,+40%)",
      "search-conditions": {
        "name": "only_null",
        "street": "only_null"
      },
      "order-conditions": {
        "created_at": "desc"
      },
      "class-name": "Company",
      "group-conditions": {},
      "name": "Новый фильтр"
    }
  }
}'

Пример создания на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/table-states");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"attributes\":{\"fields\":[\"name\",\"street\"],\"color\":\"hsl(236,+45%,+40%)\",\"search-conditions\":{\"name\":\"only_null\",\"street\":\"only_null\"},\"order-conditions\":{\"created_at\":\"desc\"},\"class-name\":\"Company\",\"group-conditions\":{},\"name\":\"Новый фильтр\"}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример обновления на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/table-states/{id}");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("PATCH");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"attributes\":{\"fields\":[\"name\",\"street\"],\"color\":\"hsl(236,+45%,+40%)\",\"search-conditions\":{\"name\":\"only_null\",\"street\":\"only_null\"},\"order-conditions\":{\"created_at\":\"desc\"},\"class-name\":\"Company\",\"group-conditions\":{},\"name\":\"Новый фильтр\"}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример создания на Ruby

require 'net/http'
require 'net/https'
require 'json'

def send_request
  uri = URI('https://app.synergycrm.ru/api/v1/table-states')

  # Create client
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_PEER
  dict = {
            "data" => {
                "type" => "table_states",
                "attributes" => {
                    "fields" => [
                        "name",
                        "street"
                    ],
                    "color" => "hsl(236,+45%,+40%)",
                    "search-conditions" => {
                        "street" => "only_null",
                        "name" => "only_null"
                    },
                    "order-conditions" => {
                        "created_at" => "desc"
                    },
                    "class-name" => "Company",
                    "group-conditions" => {

                    },
                    "name" => "некий фильтр"
                }
            }
        }
  body = JSON.dump(dict)

  # Create Request
  req =  Net::HTTP::Post.new(uri)
  # Add headers
  req.add_field "Authorization", "Bearer api_token"
  # Add headers
  req.add_field "Content-Type", "application/vnd.api+json"
  # Set body
  req.body = body

  # Fetch Request
  res = http.request(req)
  puts "Response HTTP Status Code: #{res.code}"
  puts "Response HTTP Response Body: #{res.body}"
rescue StandardError => e
  puts "HTTP Request failed (#{e.message})"
end

Пример обновления на Ruby

require 'net/http'
require 'net/https'
require 'json'

def send_request
  uri = URI('https://app.synergycrm.ru/api/v1/table-states/{id}')

  # Create client
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_PEER
  dict = {
            "data" => {
                "type" => "table_states",
                "id" => "{id}",
                "attributes" => {
                    "fields" => [
                        "name",
                        "street"
                    ],
                    "color" => "hsl(236,+45%,+40%)",
                    "search-conditions" => {
                        "street" => "only_null",
                        "name" => "only_null"
                    },
                    "order-conditions" => {
                        "created_at" => "desc"
                    },
                    "class-name" => "Company",
                    "group-conditions" => {

                    },
                    "name" => "некий фильтр"
                }
            }
        }
  body = JSON.dump(dict)

  # Create Request
  req =  Net::HTTP::Patch.new(uri)
  # Add headers
  req.add_field "Authorization", "Bearer api_token"
  # Add headers
  req.add_field "Content-Type", "application/vnd.api+json"
  # Set body
  req.body = body

  # Fetch Request
  res = http.request(req)
  puts "Response HTTP Status Code: #{res.code}"
  puts "Response HTTP Response Body: #{res.body}"
rescue StandardError => e
  puts "HTTP Request failed (#{e.message})"
end

Пример создания на GO

package main

import (
	"fmt"
	"io"
	"net/http"
	"bytes"
)

func sendApiV1TablestatescontrollerPost() {
	json := []byte(`{"data": {"type": "table_states","attributes": {"fields": ["name","street"],"color": "hsl(236,+45%,+40%)","search-conditions": {"street": "only_null","name": "only_null"},"order-conditions": {"created_at": "desc"},"class-name": "Company","group-conditions": {},"name": "некий фильтр"}}}`)
	body := bytes.NewBuffer(json)

	// Create client
	client := &http.Client{}

	// Create request
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/table-states", body)

	// Headers
	req.Header.Add("Authorization", "Bearer api_token")
	req.Header.Add("Content-Type", "application/vnd.api+json")

	// Fetch Request
	resp, err := client.Do(req)

	if err != nil {
		fmt.Println("Failure : ", err)
	}

	// Read Response Body
	respBody, _ := io.ReadAll(resp.Body)

	// Display Results
	fmt.Println("response Status : ", resp.Status)
	fmt.Println("response Headers : ", resp.Header)
	fmt.Println("response Body : ", string(respBody))
}

Пример обновления на GO

package main

import (
	"fmt"
	"io"
	"net/http"
	"bytes"
)

func sendApiV1TablestatescontrollerPost() {
	json := []byte(`{"data": {"type": "table_states","id": "{id}","attributes": {"fields": ["name","street"],"color": "hsl(236,+45%,+40%)","search-conditions": {"street": "only_null","name": "only_null"},"order-conditions": {"created_at": "desc"},"class-name": "Company","group-conditions": {},"name": "некий фильтр"}}}`)
	body := bytes.NewBuffer(json)

	// Create client
	client := &http.Client{}

	// Create request
	req, err := http.NewRequest("PATCH", "https://app.synergycrm.ru/api/v1/table-states/{id}", body)

	// Headers
	req.Header.Add("Authorization", "Bearer api_token")
	req.Header.Add("Content-Type", "application/vnd.api+json")

	// Fetch Request
	resp, err := client.Do(req)

	if err != nil {
		fmt.Println("Failure : ", err)
	}

	// Read Response Body
	respBody, _ := io.ReadAll(resp.Body)

	// Display Results
	fmt.Println("response Status : ", resp.Status)
	fmt.Println("response Headers : ", resp.Header)
	fmt.Println("response Body : ", string(respBody))
}

Пример создания на PHP

<?php

// get cURL resource
$ch = curl_init();

// set url
curl_setopt($ch, CURLOPT_URL, 'https://app.synergycrm.ru/api/v1/table-states');

// set method
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');

// return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// set headers
curl_setopt($ch, CURLOPT_HTTPHEADER, [
  'Authorization: Bearer api_token',
  'Content-Type: application/vnd.api+json',
]);

// json body
$json_array = [
  'data' => [
    'type' => 'table_states',
    'attributes' => [
      'fields' => [
        'name',
        'street'
      ],
      'color' => 'hsl(236,+45%,+40%)',
      'search-conditions' => [
        'street' => 'only_null',
        'name' => 'only_null'
      ],
      'order-conditions' => [
        'created_at' => 'desc'
      ],
      'class-name' => 'Company',
      'group-conditions' => [

      ],
      'name' => 'некий фильтр'
    ]
  ]
];
$body = json_encode($json_array);

// set body
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);

// send the request and save response to $response
$response = curl_exec($ch);

// stop if fails
if (!$response) {
  die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch));
}

echo 'HTTP Status Code: ' . curl_getinfo($ch, CURLINFO_HTTP_CODE) . PHP_EOL;
echo 'Response Body: ' . $response . PHP_EOL;

// close curl resource to free up system resources
curl_close($ch);

Пример обновления на PHP

<?php

// get cURL resource
$ch = curl_init();

// set url
curl_setopt($ch, CURLOPT_URL, 'https://app.synergycrm.ru/api/v1/table-states/{id}');

// set method
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');

// return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// set headers
curl_setopt($ch, CURLOPT_HTTPHEADER, [
  'Authorization: Bearer api_token',
  'Content-Type: application/vnd.api+json',
]);

// json body
$json_array = [
  'data' => [
    'type' => 'table_states',
    'id' => '{id}',
    'attributes' => [
      'fields' => [
        'name',
        'street'
      ],
      'color' => 'hsl(236,+45%,+40%)',
      'search-conditions' => [
        'street' => 'only_null',
        'name' => 'only_null'
      ],
      'order-conditions' => [
        'created_at' => 'desc'
      ],
      'class-name' => 'Company',
      'group-conditions' => [

      ],
      'name' => 'некий фильтр'
    ]
  ]
];
$body = json_encode($json_array);

// set body
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);

// send the request and save response to $response
$response = curl_exec($ch);

// stop if fails
if (!$response) {
  die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch));
}

echo 'HTTP Status Code: ' . curl_getinfo($ch, CURLINFO_HTTP_CODE) . PHP_EOL;
echo 'Response Body: ' . $response . PHP_EOL;

// close curl resource to free up system resources
curl_close($ch);

Пример создания на Python

import requests
import json


def send_request():
    try:
        response = requests.post(
            url="https://app.synergycrm.ru/api/v1/table-states",
            headers={
                "Authorization": "Bearer api_token",
                "Content-Type": "application/vnd.api+json",
            },
            data=json.dumps({
                "data": {
                    "type": "table_states",
                    "attributes": {
                        "fields": [
                            "name",
                            "street"
                        ],
                        "color": "hsl(236,+45%,+40%)",
                        "search-conditions": {
                            "street": "only_null",
                            "name": "only_null"
                        },
                        "order-conditions": {
                            "created_at": "desc"
                        },
                        "class-name": "Company",
                        "group-conditions": {

                        },
                        "name": "некий фильтр"
                    }
                }
            })
        )
        print('Response HTTP Status Code: {status_code}'.format(
            status_code=response.status_code))
        print('Response HTTP Response Body: {content}'.format(
            content=response.content))
    except requests.exceptions.RequestException:
        print('HTTP Request failed')

Пример обновления на Python

import requests
import json


def send_request():
    try:
        response = requests.patch(
            url="https://app.synergycrm.ru/api/v1/table-states/{id}",
            headers={
                "Authorization": "Bearer api_token",
                "Content-Type": "application/vnd.api+json",
            },
            data=json.dumps({
                "data": {
                    "type": "table_states",
                    "id": "{id}",
                    "attributes": {
                        "fields": [
                            "name",
                            "street"
                        ],
                        "color": "hsl(236,+45%,+40%)",
                        "search-conditions": {
                            "street": "only_null",
                            "name": "only_null"
                        },
                        "order-conditions": {
                            "created_at": "desc"
                        },
                        "class-name": "Company",
                        "group-conditions": {

                        },
                        "name": "некий фильтр"
                    }
                }
            })
        )
        print('Response HTTP Status Code: {status_code}'.format(
            status_code=response.status_code))
        print('Response HTTP Response Body: {content}'.format(
            content=response.content))
    except requests.exceptions.RequestException:
        print('HTTP Request failed')

Пример создания на Dart

// import http package
import 'package:http/http.dart' as http;

send_request() async {
    var url = "https://app.synergycrm.ru/api/v1/table-states";
    
    // Create request
    var request = http.Request('POST', Uri.parse(url));

    // Add headers
    headers={
        "Authorization": "Bearer api_token",
        "Content-Type": "application/vnd.api+json",
    },
    request.headers.addAll(headers);

    // Set body
    request.body = json.encode({
            "data" : {
                "type" : "table_states",
                "attributes" : {
                    "fields" : [
                        "name",
                        "street"
                    ],
                    "color" : "hsl(236,+45%,+40%)",
                    "search-conditions" : {
                        "street" : "only_null",
                        "name" : "only_null"
                    },
                    "order-conditions" : {
                        "created_at" : "desc"
                    },
                    "class-name" : "Company",
                    "group-conditions" : {

                    },
                    "name" : "некий фильтр"
                }
            }
        });

    // Fetch Request
    http.StreamedResponse response = await request.send();

    if (response.statusCode == 200) {
        debugPrint(await response.stream.bytesToString());
    }
    else {
        debugPrint(response.reasonPhrase);
    }
}

Пример обновления на Dart

// import http package
import 'package:http/http.dart' as http;

send_request() async {
    var url = "https://app.synergycrm.ru/api/v1/table-states/{id}";
    
    // Create request
    var request = http.Request('PATCH', Uri.parse(url));

    // Add headers
    headers={
        "Authorization": "Bearer api_token",
        "Content-Type": "application/vnd.api+json",
    },
    request.headers.addAll(headers);

    // Set body
    request.body = json.encode({
            "data" : {
                "type" : "table_states",
                "id" : "{id}",
                "attributes" : {
                    "fields" : [
                        "name",
                        "street"
                    ],
                    "color" : "hsl(236,+45%,+40%)",
                    "search-conditions" : {
                        "street" : "only_null",
                        "name" : "only_null"
                    },
                    "order-conditions" : {
                        "created_at" : "desc"
                    },
                    "class-name" : "Company",
                    "group-conditions" : {

                    },
                    "name" : "некий фильтр"
                }
            }
        });

    // Fetch Request
    http.StreamedResponse response = await request.send();

    if (response.statusCode == 200) {
        debugPrint(await response.stream.bytesToString());
    }
    else {
        debugPrint(response.reasonPhrase);
    }
}

Удаление

Удалить табличный фильтр пример на CURL

curl -X "DELETE" "http://localhost:3000/api/v1/table-states/{id}" \
     -H 'Authorization: Bearer api_token' \
     -H 'Content-Type: application/vnd.api+json'

Пример удаления на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/table-states/{id}");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("DELETE");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример удаления на Ruby

require 'net/http'
require 'net/https'
require 'json'

def send_request
  uri = URI('https://app.synergycrm.ru/api/v1/table-states/{id}')

  # Create client
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_PEER

  # Create Request
  req =  Net::HTTP::Delete.new(uri)
  # Add headers
  req.add_field "Authorization", "Bearer api_token"
  # Add headers
  req.add_field "Content-Type", "application/vnd.api+json"

  # Fetch Request
  res = http.request(req)
  puts "Response HTTP Status Code: #{res.code}"
  puts "Response HTTP Response Body: #{res.body}"
rescue StandardError => e
  puts "HTTP Request failed (#{e.message})"
end

Пример удаления на GO

package main

import (
	"fmt"
	"io"
	"net/http"
	"bytes"
)

func sendApiV1TablestatescontrollerPost() {
	json := []byte(`{}`)
	body := bytes.NewBuffer(json)

	// Create client
	client := &http.Client{}

	// Create request
	req, err := http.NewRequest("DELETE", "https://app.synergycrm.ru/api/v1/table-states/{id}", body)

	// Headers
	req.Header.Add("Authorization", "Bearer api_token")
	req.Header.Add("Content-Type", "application/vnd.api+json")

	// Fetch Request
	resp, err := client.Do(req)

	if err != nil {
		fmt.Println("Failure : ", err)
	}

	// Read Response Body
	respBody, _ := io.ReadAll(resp.Body)

	// Display Results
	fmt.Println("response Status : ", resp.Status)
	fmt.Println("response Headers : ", resp.Header)
	fmt.Println("response Body : ", string(respBody))
}

Пример удаления на PHP

<?php

// get cURL resource
$ch = curl_init();

// set url
curl_setopt($ch, CURLOPT_URL, 'https://app.synergycrm.ru/api/v1/table-states/{id}');

// set method
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');

// return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// set headers
curl_setopt($ch, CURLOPT_HTTPHEADER, [
  'Authorization: Bearer api_token',
  'Content-Type: application/vnd.api+json',
]);

// send the request and save response to $response
$response = curl_exec($ch);

// stop if fails
if (!$response) {
  die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch));
}

echo 'HTTP Status Code: ' . curl_getinfo($ch, CURLINFO_HTTP_CODE) . PHP_EOL;
echo 'Response Body: ' . $response . PHP_EOL;

// close curl resource to free up system resources
curl_close($ch);

Пример удаления на Python

import requests
import json


def send_request():
    try:
        response = requests.delete(
            url="https://app.synergycrm.ru/api/v1/table-states/{id}",
            headers={
                "Authorization": "Bearer api_token",
                "Content-Type": "application/vnd.api+json",
            }
        )
        print('Response HTTP Status Code: {status_code}'.format(
            status_code=response.status_code))
        print('Response HTTP Response Body: {content}'.format(
            content=response.content))
    except requests.exceptions.RequestException:
        print('HTTP Request failed')

Пример удаления на Dart

// import http package
import 'package:http/http.dart' as http;

send_request() async {
    var url = "https://app.synergycrm.ru/api/v1/table-states/{id}";
    
    // Create request
    var request = http.Request('DELETE', Uri.parse(url));

    // Add headers
    headers={
        "Authorization": "Bearer api_token",
        "Content-Type": "application/vnd.api+json",
    },
    request.headers.addAll(headers);

    // Fetch Request
    http.StreamedResponse response = await request.send();

    if (response.statusCode == 200) {
        debugPrint(await response.stream.bytesToString());
    }
    else {
        debugPrint(response.reasonPhrase);
    }
}

Файлы

JSON API type documents
URL /api/v1/documents
Список GET /api/v1/documents
Чтение GET /api/v1/documents/{id}
Удаление DELETE /api/v1/documents/{id}

Атрибуты

Ниже приведен пример формата данных, в реальном ответе будут присутствовать все перечисленные атрибуты

{
    "data": {
        "id": "2",
        "type": "documents",
        "links": {
            "self": "http://app.synergycrm.ru/api/v1/documents/2"
        },
        "attributes": {
            "created-at": "2022-02-22T12:02:22.222+03:00",
            "updated-at": "2022-02-22T12:02:22.222+03:00",
            "cached-at": "2022-02-22T12:02:22.222+03:00",
            "name": "example.jpg",
            "size": "22222.0",
            "download-link": "https://example-link",
            "content-type": "image/jpeg"
        }
    }
}

Основные атрибуты

Имя Тип Пример Запись Описание
name string "example.jpg" да Название файла
size string "103820.0" да Размер файла
download-link string "https://example-link" нет Ссылка для скачивания
content-type string "image/jpeg" нет Тип файла
created-at datetime 2022-02-22T12:02:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:02:22.222+03:00 нет Дата обновления
cached-at datetime 2022-02-22T12:02:22.222+03:00 Нет Закэшировано

* Обязательные поля

Связи

Пример данных (перечислены не все связи)

{
    "data": {
        "id": "2",
        "type": "documents",
        "links": {
            "self": "http://app.synergycrm.ru/api/v1/documents/2"
        },
        "relationships": {
            "company": {
                "links": {
                    "self": "http://app.synergycrm.ru/api/v1/documents/2/relationships/company",
                    "related": "http://app.synergycrm.ru/api/v1/documents/2/company"
                }
            },
            "contact": {
                "links": {
                    "self": "http://app.synergycrm.ru/api/v1/documents/2/relationships/contact",
                    "related": "http://app.synergycrm.ru/api/v1/documents/2/contact"
                }
            },
            "category":{
                    "links":{
                      "self":"/api/v1/documents/2/relationships/category",
                      "related":"/api/v1/documents/2/category"
                }
            }
        }
    }
}

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Создатель user users
Компания company companies
Контакт contact contacts
Задача diary diary
Сделки deals deals
Заявки orders orders
Продукты products products
Обложка продукта product-covers product-covers
Категория category document-categories

Фильтры

Получить список документов по определённой компании

curl -G "https://app.synergycrm.ru/api/v1/documents?filter[entity_type]=Company?filter[entity_id]=2" \
  -X GET \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/documents?filter[entity_type]=Company?filter[entity_id]=2");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/documents?filter[entity_type]=Company?filter[entity_id]=2')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/documents?filter[entity_type]=Company?filter[entity_id]=2", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/documents?filter[entity_type]=Company?filter[entity_id]=2',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/documents?filter[entity_type]=Company?filter[entity_id]=2"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/documents?filter[entity_type]=Company?filter[entity_id]=2'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
entity_type* Вывести документы по определённому типу ресурса filter[entity_type]=Contact
entity_id** Вывести документы по идентификатору объекта filter[entity_id]=2
content-type Вывести документы по типу файла filter[content-type]=image/jpeg

* Возможные значения: Company, Contact, Deal, Order, User, Diary, Product, EstateProperty, Checkup, Contract, Activity.
** Фильтры entity_type и entity_id можно использовать только вместе. В фильтре должен быть указан только один параметр (1 класс и 1 id).

Типы

Создание типа документа

curl "https://app.synergycrm.ru/api/v1/document-types" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"document-types",
         "attributes":{
           "name":"Новый тип документа",
           "active":true
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/document-types");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"document-types\",\"attributes\":{\"name\":\"Новый тип документа\",\"active\":true}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/document-types')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"document-types",
         "attributes":{
           "name":"Новый тип документа",
           "active":true
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"document-types",
         "attributes":{
           "name":"Новый тип документа",
           "active":true
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/document-types", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/document-types',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"document-types",
         "attributes":{
           "name":"Новый тип документа",
           "active":true
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/document-types"

payload = json.dumps({
       "data":{
         "type":"document-types",
         "attributes":{
           "name":"Новый тип документа",
           "active":true
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/document-types'));
  request.body = json.encode({
       "data":{
         "type":"document-types",
         "attributes":{
           "name":"Новый тип документа",
           "active":true
         }
       }
     });
  request.headers.addAll(headers);

  http.StreamedResponse response = await request.send();

  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type document-types
URL /api/v1/document-types
Список GET /api/v1/document-types
Чтение GET /api/v1/document-types/{id}
Создание POST /api/v1/document-types
Редактирование PATCH /api/v1/document-types/{id}
Удаление DELETE /api/v1/document-types/{id}

Атрибуты

Атрибуты типа документа

{
  "data": {
      "type":"document-types",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "name": "Мой тип документа",
        "active":true
      }
   }
}
Имя Тип Пример Запись Описание
name* string Мой тип документа да Имя типа документа
active boolean true да Активность типа документа
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список типов документов созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/document-types" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/document-types?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/document-types?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/document-types?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/document-types?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/document-types?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/document-types?filter[created-at-gte]=2022.02.22 12:00'));

  request.headers.addAll(headers);

  http.StreamedResponse response = await request.send();

  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести типы документов, созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести типы документов, созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести типы документов, обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести типы документов, обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Трекинг рабочего времени пользователя

Создание рабочего времени

curl "https://app.synergycrm.ru/api/v1/user-work-times" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"user-work-times",
         "attributes":{
           "started-at":"2022-02-22T12:22:22.222+03:00",
           "finished-at":"2022-02-22T12:22:22.222+03:00"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/user-work-times");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"user-work-times\",\"attributes\":{\"started-at\":\"2022-02-22T12:22:22.222+03:00\",\"finished-at\":\"2022-02-22T12:22:22.222+03:00\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/user-work-times')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
         "data":{         
          "type":"user-work-times",         
          "attributes":{           
            "started-at":"2022-02-22T12:22:22.222+03:00",           "finished-at":"2022-02-22T12:22:22.222+03:00"         
            }       
          }     
        }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
         "data":{         
          "type":"user-work-times",         
          "attributes":{           
            "started-at":"2022-02-22T12:22:22.222+03:00",           "finished-at":"2022-02-22T12:22:22.222+03:00"         
            }       
          }     
        }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/user-work-times", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/user-work-times',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
         "data":{         
          "type":"user-work-times",         
          "attributes":{           
            "started-at":"2022-02-22T12:22:22.222+03:00",           "finished-at":"2022-02-22T12:22:22.222+03:00"         
            }       
          }     
        }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/user-work-times"

payload = json.dumps({
         "data":{         
          "type":"user-work-times",         
          "attributes":{           
            "started-at":"2022-02-22T12:22:22.222+03:00",           "finished-at":"2022-02-22T12:22:22.222+03:00"         
            }       
          }     
        })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/user-work-times'));
  request.body = json.encode({
         "data":{         
          "type":"user-work-times",         
          "attributes":{           
            "started-at":"2022-02-22T12:22:22.222+03:00",           "finished-at":"2022-02-22T12:22:22.222+03:00"         
            }       
          }     
        });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type user-work-times
URL /api/v1/user-work-times
Список GET /api/v1/user-work-times
Чтение GET /api/v1/user-work-times/{id}
Создание POST /api/v1/user-work-times
Редактирование PATCH /api/v1/user-work-times/{id}
Удаление DELETE /api/v1/user-work-times/{id}

Атрибуты

Атрибуты рабочего времени сотрудника

{
  "data": {
    "type":"user-work-times",
    "id":"2",
    "attributes":{
      "started-at":"2022-02-22T12:22:22.222+03:00",
      "finished-at":"2022-02-22T12:22:22.222+03:00",
      "created-at":"2022-02-22T12:22:22.222+03:00",
      "updated-at":"2022-02-22T12:22:22.222+03:00"
    }
  }
}
Имя Тип Пример Запись Описание
started-at datetime 2016-11-26T12:07:51.572+03:00 да Провайдер телефонии
finished-at datetime 2016-11-26T12:07:51.572+03:00 да Дата окончания рабочего времени
created-at datetime 2016-11-26T12:07:51.572+03:00 да Дата создания
updated-at datetime 2016-11-26T12:07:51.572+03:00 нет Дата обновления

Фильтры

Получить список учтённого рабочего времени по определённому пользователю

curl -G "https://app.synergycrm.ru/api/v1/user-work-times?filter[user-id]=2" \
  -X GET \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/user-work-times?filter[user-id]=2");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/user-work-times?filter[user-id]=2')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/user-work-times?filter[user-id]=2", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/user-work-times?filter[user-id]=2',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/user-work-times?filter[user-id]=2"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text) 
Фильтр Описание Пример
user-id Вывести записи о рабочем времени созданные определённым пользователем filter[user-id]=2
started-at-gte Вывести записи о рабочем времени созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
started-at-lte Вывести записи о рабочем времени созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
finished-at-gte Вывести записи о рабочем времени созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
finished-at-lte Вывести записи о рабочем времени созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
created-at-gte Вывести записи о рабочем времени созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести записи о рабочем времени созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести записи о рабочем времени обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести записи о рабочем времени обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00
finished-at-null Вывести незавершенные объекты filter[finished-at-null]=true

Загрузка файлов

Загрузка файлов происходит в два действия: Сначала нужно запросить временные ключи по адресу https://upload.app.synergycrm.ru/ и, после, отправить файл с ключами по адресу хранилища.

Получение временных ключей

Получение ключей и адреса для загрузки файла

curl "https://upload.app.synergycrm.ru/api/v1/files" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
    {
      "type": "files",
      "data": {
        "filename": "document.docx",
        "resource-type": "contacts",
        "resource-id": 2
      }
    }
  EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://upload.app.synergycrm.ru/api/v1/files");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"type\": \"files\",\"data\": {\"filename\": \"document.docx\",\"resource-type\": \"contacts\",\"resource-id\":2}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://upload.app.synergycrm.ru/api/v1/files')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
      "type": "files",
      "data": {
        "filename": "document.docx",
        "resource-type": "contacts",
        "resource-id": 2
      }
    }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
      "type": "files",
      "data": {
        "filename": "document.docx",
        "resource-type": "contacts",
        "resource-id": 2
      }
    }`)
	req, err := http.NewRequest("POST", "https://upload.app.synergycrm.ru/api/v1/files", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => '',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = ""

payload = json.dumps()

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://upload.app.synergycrm.ru/api/v1/files'));
  request.body = json.encode({
      "type": "files",
      "data": {
        "filename": "document.docx",
        "resource-type": "contacts",
        "resource-id": 2
      }
    });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type files
URL /api/v1/files
Создание POST /api/v1/files

Атрибуты

Тело запроса

{
  "type": "files",
  "data": {
    "filename": "document.docx",
    "resource-type": "contacts",
    "resource-id": 2
  }
}

Тело ответа

{
  "type": "files",
  "data": {
    "url": "https://storage.yandexcloud.net/synergycrm2-production/",
    "form-fields": {
      "acl": "public-read",
      "key": "documents/api/document.docx",
      "Expires": "Thu, 10 Nov 2019 09:00:00 GMT",
      "policy": "generated-policy",
      "x-amz-credential": "AWS1SIMPLECRED/20191114/eu-west-1/s3/aws4_request",
      "x-amz-algorithm": "AWS4-HMAC-SHA256",
      "x-amz-date": "20191114T130410Z",
      "x-amz-signature": "generated-credential"
    }
  }
}
Имя Тип Пример Запись Описание
filename string document.txt да Название файла
resource-type string contacts да Ресурс, в который должен быть добавлен файл ((contacts, companies, deals, orders, products))
resource-id integer 2 да Идентификатор объекта, в который должен быть добавлен файл
url string https://storage.yandexcloud.net/synergycrm2-production/ нет URL для загрузки файла
form-fields* object { "acl": "public-read" } нет Временные данные, которые должны быть переданы отдельными полями вместо с файлом по "url"

* Время жизни ключей 5 минут с момента запроса, лимит на размер файла - 10 мегабайт.

Загрузка файлов в хранилище

Пример загрузки файла с помощью cURL

curl -X POST \
  https://storage.yandexcloud.net/synergycrm2-production/ \
  -H "Content-Type: multipart/form-data" \
  -F "key=documents/api/hash/document.txt" \
  -F "Expires=Thu, 10 Nov 2019 09:00:00 GMT" \
  -F "acl=public-read" \
  -F "policy=generated-policy" \
  -F "x-amz-credential=generated-cred/20191114/eu-west-1/s3/aws4_request" \
  -F "x-amz-algorithm=AWS4-HMAC-SHA256" \
  -F "x-amz-date=20191114T130420Z" \
  -F "x-amz-signature=amz-signature" \
  -F file=@/path/to/file

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://storage.yandexcloud.net/synergycrm2-production/");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "multipart/form-data");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://storage.yandexcloud.net/synergycrm2-production/')
req = Net::HTTP::Post.new(uri)

req.set_form(
  [
    [
      'key',
      'documents/api/hash/document.txt'
    ],
    [
      'Expires',
      'Thu, 10 Nov 2019 09:00:00 GMT'
    ],
    [
      'acl',
      'public-read'
    ],
    [
      'policy',
      'generated-policy'
    ],
    [
      'x-amz-credential',
      'generated-cred/20191114/eu-west-1/s3/aws4_request'
    ],
    [
      'x-amz-algorithm',
      'AWS4-HMAC-SHA256'
    ],
    [
      'x-amz-date',
      '20191114T130420Z'
    ],
    [
      'x-amz-signature',
      'amz-signature'
    ],
    [
      'file',
      File.open('/path/to/file')
    ]
  ],
  'multipart/form-data'
)

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("POST", "https://storage.yandexcloud.net/synergycrm2-production/", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "multipart/form-data")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://storage.yandexcloud.net/synergycrm2-production/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type' => 'multipart/form-data',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
    'key' => 'documents/api/hash/document.txt',
    'Expires' => 'Thu, 10 Nov 2019 09:00:00 GMT',
    'acl' => 'public-read',
    'policy' => 'generated-policy',
    'x-amz-credential' => 'generated-cred/20191114/eu-west-1/s3/aws4_request',
    'x-amz-algorithm' => 'AWS4-HMAC-SHA256',
    'x-amz-date' => '20191114T130420Z',
    'x-amz-signature' => 'amz-signature',
    'file' => new CURLFile('/path/to/file'),
]);

$response = curl_exec($ch);

curl_close($ch);

Пример на Python

import requests

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

files = {
    'key': (None, 'documents/api/hash/document.txt'),
    'Expires': (None, 'Thu, 10 Nov 2019 09:00:00 GMT'),
    'acl': (None, 'public-read'),
    'policy': (None, 'generated-policy'),
    'x-amz-credential': (None, 'generated-cred/20191114/eu-west-1/s3/aws4_request'),
    'x-amz-algorithm': (None, 'AWS4-HMAC-SHA256'),
    'x-amz-date': (None, '20191114T130420Z'),
    'x-amz-signature': (None, 'amz-signature'),
    'file': open('/path/to/file', 'rb'),
}

response = requests.post('https://storage.yandexcloud.net/synergycrm2-production/', headers=headers, files=files)

Пример на Dart

import 'package:http/http.dart' as http;

void main() async {
  var url = Uri.parse('https://storage.yandexcloud.net/synergycrm2-production/');
  var req = new http.MultipartRequest('POST', url)
    ..fields['key'] = 'documents/api/hash/document.txt'
    ..fields['Expires'] = 'Thu, 10 Nov 2019 09:00:00 GMT'
    ..fields['acl'] = 'public-read'
    ..fields['policy'] = 'generated-policy'
    ..fields['x-amz-credential'] = 'generated-cred/20191114/eu-west-1/s3/aws4_request'
    ..fields['x-amz-algorithm'] = 'AWS4-HMAC-SHA256'
    ..fields['x-amz-date'] = '20191114T130420Z'
    ..fields['x-amz-signature'] = 'amz-signature'
    ..files.add(await http.MultipartFile.fromPath(
      'file', '/path/to/file'))
  req.headers['Content-Type'] = 'multipart/form-data';
  var res = await req.send();
  if (res.statusCode != 200) throw Exception('http.post error: statusCode= ${res.statusCode}');
  print(res.body);
}

После полученных ключей необходимо послать документ на файловое хранилище. Все поля из form-fields должны быть переданы как поля формы. В отличие от остальных запросов, этот должен иметь заголовок Content-Type: multipart/form-data.

UTM-метки (устарел)

* Данный ресурс устарел и больше не поддерживается. Необходимо информацию о UTM метках компаний, сделок и заявок помещать в атрибуты самого объекта, в момент его создания или редактирования.

Создание UTM-метки

curl "https://app.synergycrm.ru/api/v1/utm-labels" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"utm-labels",
         "attributes":{
           "campaign": "discount",
           "medium": "email",
           "source": "synergycrm"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/utm-labels");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"utm-labels\",\"attributes\":{\"campaign\": \"discount\",\"medium\": \"email\",\"source\":\"synergycrm\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/utm-labels')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"utm-labels",
         "attributes":{
           "campaign": "discount",
           "medium": "email",
           "source": "synergycrm"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"utm-labels",
         "attributes":{
           "campaign": "discount",
           "medium": "email",
           "source": "synergycrm"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/utm-labels", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/utm-labels',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"utm-labels",
         "attributes":{
           "campaign": "discount",
           "medium": "email",
           "source": "synergycrm"
         }
       }
     }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/utm-labels"

payload = json.dumps({
       "data":{
         "type":"utm-labels",
         "attributes":{
           "campaign": "discount",
           "medium": "email",
           "source": "synergycrm"
         }
       }
     })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/utm-labels'));
  request.body = json.encode({
       "data":{
         "type":"utm-labels",
         "attributes":{
           "campaign": "discount",
           "medium": "email",
           "source": "synergycrm"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Создание UTM-метки с привязанным контактом, заявкой и звонком

curl "https://app.synergycrm.ru/api/v1/utm-labels" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"utm-labels",
         "attributes":{
           "source": "synergy",
           "campaign": "discount",
           "medium": "email",
           "content": "link",
           "term": "-30%"
         },
         "relationships": {
           "contacts": {
             "data": [
               {
                 "type":"contacts",
                 "id":2
               }
             ]
           },
           "telephony-calls": { 
             "data": [
               {
                 "type": "telephony-calls",
                 "id": 2
               }
             ]
           },
           "orders": {
             "data": [
               {
                 "type": "orders",
                 "id": 2
               }
             ]
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/utm-labels");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"utm-labels\",\"attributes\":{\"source\": \"synergy\",\"campaign\": \"discount\",\"medium\":\"email\",\"content\": \"link\",\"term\": \"-30%\"},\"relationships\": {\"contacts\": {\"data\": [{\"type\":\"contacts\",\"id\":2}]},\"telephony-calls\": {\"data\": [{\"type\": \"telephony-calls\",\"id\": 2}]},\"orders\": {\"data\": [{\"type\": \"orders\",\"id\": 2}]}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/utm-labels')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{       
  "data":{         
    "type":"utm-labels",         
    "attributes":{  
      "source": "synergy",           
      "campaign": "discount",           
      "medium": "email",           
      "content": "link",           
      "term": "-30%" 
      },         
      "relationships": {           
        "contacts": {             
          "data": [ {                 
            "type":"contacts",                 
            "id":2 
            } ] 
          },           
            "telephony-calls": {              
              "data": [ {                 
                "type": "telephony-calls",                 
                "id": 2 
                } ] 
              },           
                "orders": { 
                  "data": [ { 
                    "type": "orders",                 
                    "id":2               
                    } ]           
                  }         
                }       
              }     
            }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{       
  "data":{         
    "type":"utm-labels",         
    "attributes":{  
      "source": "synergy",           
      "campaign": "discount",           
      "medium": "email",           
      "content": "link",           
      "term": "-30%" 
      },         
      "relationships": {           
        "contacts": {             
          "data": [ {                 
            "type":"contacts",                 
            "id":2 
            } ] 
          },           
            "telephony-calls": {              
              "data": [ {                 
                "type": "telephony-calls",                 
                "id": 2 
                } ] 
              },           
                "orders": { 
                  "data": [ { 
                    "type": "orders",                 
                    "id":2               
                    } ]           
                  }         
                }       
              }     
            }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/utm-labels", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/utm-labels',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{       
  "data":{         
    "type":"utm-labels",         
    "attributes":{  
      "source": "synergy",           
      "campaign": "discount",           
      "medium": "email",           
      "content": "link",           
      "term": "-30%" 
      },         
      "relationships": {           
        "contacts": {             
          "data": [ {                 
            "type":"contacts",                 
            "id":2 
            } ] 
          },           
            "telephony-calls": {              
              "data": [ {                 
                "type": "telephony-calls",                 
                "id": 2 
                } ] 
              },           
                "orders": { 
                  "data": [ { 
                    "type": "orders",                 
                    "id":2               
                    } ]           
                  }         
                }       
              }     
            }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/utm-labels"

payload = json.dumps({       
  "data":{         
    "type":"utm-labels",         
    "attributes":{  
      "source": "synergy",           
      "campaign": "discount",           
      "medium": "email",           
      "content": "link",           
      "term": "-30%" 
      },         
      "relationships": {           
        "contacts": {             
          "data": [ {                 
            "type":"contacts",                 
            "id":2 
            } ] 
          },           
            "telephony-calls": {              
              "data": [ {                 
                "type": "telephony-calls",                 
                "id": 2 
                } ] 
              },           
                "orders": { 
                  "data": [ { 
                    "type": "orders",                 
                    "id":2               
                    } ]           
                  }         
                }       
              }     
            })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/utm-labels'));
  request.body = json.encode({       
  "data":{         
    "type":"utm-labels",         
    "attributes":{  
      "source": "synergy",           
      "campaign": "discount",           
      "medium": "email",           
      "content": "link",           
      "term": "-30%" 
      },         
      "relationships": {           
        "contacts": {             
          "data": [ {                 
            "type":"contacts",                 
            "id":2 
            } ] 
          },           
            "telephony-calls": {              
              "data": [ {                 
                "type": "telephony-calls",                 
                "id": 2 
                } ] 
              },           
                "orders": { 
                  "data": [ { 
                    "type": "orders",                 
                    "id":2               
                    } ]           
                  }         
                }       
              }     
            });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type utm-labels
URL /api/v1/utm-labels
Список GET /api/v1/utm-labels
Чтение GET /api/v1/utm-labels/{id}
Создание POST /api/v1/utm-labels
Редактирование PATCH /api/v1/utm-labels/{id}
Удаление DELETE /api/v1/utm-labels/{id}

Атрибуты

Атрибуты UTM-метки

{
    "data": {
        "type": "utm-labels",
        "id": "2",
        "attributes": {
            "campaign": "promo",
            "city": "Moscow",
            "content" : "link",
            "created-at" : "2022-02-22T12:02:22.222+03:00",
            "landing-page" : "landing.page",
            "medium" : "Broad",
            "search-query" : "лучшая crm система",
            "source" : "synergycrm.ru",
            "term" : "Term",
            "u-type" : "utm",
            "updated-at" : "2022-02-22T12:02:22.222+03:00"
        }
    }
}
Имя Тип Пример Запись Описание
campaign string promo да Название кампании
city string Samara да Город кампании
content string link да Идентификатор объявления
created-at datetime 2016-11-26T12:07:51.572+03:00 нет Дата создания
landing-page string landing.page да Идентификатор посадочной страницы
medium string Broad да Тип трафика
search-query string crm да Поисковый запрос
source string synergycrm.ru да Источник кампании
term string api да Ключевое слово
u-type string utm да Тип метки
updated-at datetime 2016-11-26T12:07:51.572+03:00 нет Дата обновления

Связи

Пример данных (перечислены не все связи)

{
  "data": {
    "type":"utm-labels",
    "id":"2",
    "relationships":{
      "orders":{
        "links":{
          "self":"/api/v1/utm-labels/2/relationships/orders",
          "related":"/api/v1/utm-labels/2/orders"
        }
      },
      "deals":{
        "links":{
          "self":"/api/v1/utm-labels/2/relationships/deals",
          "related":"/api/v1/utm-labels/2/deals"
        }
      }
    }
  }
}

Пример запроса с загруженными статусами и категориями продуктов

curl "https://app.synergycrm.ru/api/v1/utm-labels?include=deals,contacts" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/utm-labels?include=deals,contacts");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/utm-labels?include=deals,contacts')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/utm-labels?include=deals,contacts", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/utm-labels?include=deals,contacts',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/utm-labels?include=deals,contacts"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text) 

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/utm-labels?include=deals,contacts'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Компания company companies
Контакт contact contacts
Звонки telephony-calls telephony-calls
Заявки orders orders
Сделки deals deals

Фильтры

Получить список меток созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/utm-labels" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/utm-labels");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");
		httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("filter[created-at-gte]=2022.02.22 12:00");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/utm-labels')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/x-www-form-urlencoded'
req['Authorization'] = 'Bearer api_token'

req.body = 'filter[created-at-gte]=2022.02.22 12:00'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`filter[created-at-gte]=2022.02.22 12:00`)
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/utm-labels", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/utm-labels?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/utm-labels?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text) 

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/utm-labels?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести UTM-метки созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести UTM-метки созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести UTM-метки обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести UTM-метки обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Уведомления

Чтение уведомления

curl "https://app.synergycrm.ru/api/v1/notifications" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/notifications");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/notifications')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/notifications", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/notifications',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/notifications"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/notifications'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type notifications
URL /api/v1/notifications
Список GET /api/v1/notifications
Чтение GET /api/v1/notifications/{id}
Изменить статус на "прочитано" POST /api/v1/notifications/read_all

Атрибуты

Атрибуты увдомления

{
    "data": {
      "type":"notifications",
      "id":"2",
      "attributes":{
        "created-at": "2022-02-22T12:02:22.222+03:00",
        "updated-at": "2022-02-22T12:02:22.222+03:00",
        "text": "Текст уведомлоения",
        "params":{
          "time" : "0",
          "entity" : null,
          "responsible" : ""
        },
        "key": "diarytask_expired",
        "emailed-at": "2022-02-22T12:02:22.222+03:00",
        "read-at": "2022-02-22T12:02:22.222+03:00",
        "confirm-read": false
      }
   }
}

Основные атрибуты

Имя Тип Пример Запись Описание
key string comment да Тип уведомления по объекту
created-at datetime 2022-02-22T12:02:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:02:22.222+03:00 да Дата обновления
emailed-at datetime 2022-02-22T12:02:22.222+03:00 да Дата отправки на email
read-at datetime 2022-02-22T12:02:22.222+03:00 да Дата прочтения уведомления
text text Просрочена задача да Текст уведомления
confirm-read boolean false да Подтверждение прочтения
params hash {"time":"0"} да Параметры уведомления

Связи

Пример данных (перечислены не все связи)

{
    "data": {
      "type":"notifications",
      "id":"2",
      "relationships":{
        "user":{
          "links":{
            "self":"/api/v1/notifications/2/relationships/user",
            "related":"/api/v1/notifications/2/user"
          }
        },
        "sender":{
          "links":{
            "self":"/api/v1/notifications/2/relationships/sender",
            "related":"/api/v1/notifications/2/sender"
          }
        },
      }
   }
}

Пример запроса с пометкой уведомлений (прочитано)

curl "https://app.synergycrm.ru/api/v1/notifications/read_all" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
    {
      "ids": [222, 2222, 22222]
    }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/notifications/read_all");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"ids\": [222, 2222, 22222]}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/notifications/read_all')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
      "ids": [222, 2222, 22222]
    }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
      "ids": [222, 2222, 22222]
    }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/notifications/read_all", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/notifications/read_all',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
      "ids": [222, 2222, 22222]
    }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/notifications/read_all"

payload = json.dumps({
      "ids": [222, 2222, 22222]
    })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/notifications/read_all'));
  request.body = json.encode({
      "ids": [222, 2222, 22222]
    });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Пример запроса с загруженными автором изменения и объектом уведомления

curl "https://app.synergycrm.ru/api/v1/notifications?include=user,sender" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/notifications?include=user,sender");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/notifications?include=user,sender')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/notifications?include=user,sender", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/notifications?include=user,sender',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/notifications?include=user,sender"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/notifications?include=user,sender'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Получатель уведомления user users
Отправитель уведомления sender users
Объект уведомления entity telephony-calls, estate-finders, orders, checkups, diaries, users, invoice-payments, contracts, estate-properties, contacts, invoices, contact-groups, mail-messages, companies, entries, deals, projects

Фильтры

Получить список уведомлений по типу уведомления по объекту

curl -G "https://app.synergycrm.ru/api/v1/notifications" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[key]=change_responsible"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/notifications?filter[key]=change_responsible");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/notifications?filter[key]=change_responsible')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/notifications?filter[key]=change_responsible", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/notifications?filter[key]=change_responsible',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/notifications?filter[key]=change_responsible"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/notifications?filter[key]=change_responsible'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести уведомления созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести уведомления созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести уведомления обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести уведомления обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00
key* Вывести уведомления по определённому типу уведомления по объекту filter[key]=change_responsible

* Возможные значения: change_responsible, comment, notification_read, add_performers, diarytask_completed, diaryevent_completed, diaryevent_started, diarytask_expired, new_user, scenario_notify, new_mail, system_update, incoming_call, chat_new_message.

Документы

JSON API type document-template-renders
URL /api/v1/document-template-renders
Список GET /api/v1/document-template-renders
Создание POST /api/v1/document-template-renders
Чтение GET /api/v1/document-template-renders/{id}
Скачать PDF GET /api/v1/document-template-renders/{id}.pdf
Скачать DOCX GET /api/v1/document-template-renders/{id}.docx
Удаление DELETE /api/v1/document-template-renders/{id}

Чтение документа

curl "https://app.synergycrm.ru/api/v1/document-template-renders" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/document-template-renders");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/document-template-renders')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/document-template-renders", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/document-template-renders',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/document-template-renders"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/document-template-renders'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Скачать PDF

curl "https://app.synergycrm.ru/api/v1/document-template-renders/1.pdf" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  --output file.pdf

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/document-template-renders/1.pdf");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/document-template-renders/1.pdf')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end
File.write('file.pdf', res.body)

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/document-template-renders/1.pdf", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/document-template-renders/1.pdf',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/document-template-renders/1.pdf"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/document-template-renders/1.pdf'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Скачать DOCX

curl "https://app.synergycrm.ru/api/v1/document-template-renders/2.docx" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  --output file.docx

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/document-template-renders/2.docx");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/document-template-renders/2.docx')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end
File.write('file.docx', res.body)

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/document-template-renders/2.docx", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/document-template-renders/2.docx',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/document-template-renders/2.docx"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/document-template-renders/2.docx'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Создание документа

curl "https://app.synergycrm.ru/api/v1/document-template-renders" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"document-template-renders",
         "attributes":{
           "name":"Документ"
         },
         "relationships":{
           "document-template":{
             "data":{
               "type":"document-templates",
               "id":"2"
             }
           },
           "entity":{
             "data":{
               "type":"deals",
               "id":"3"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/document-template-renders");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"document-template-renders\",\"attributes\":{\"name\":\"Документ\"},\"relationships\":{\"document-template\":{\"data\":{\"type\":\"document-templates\",\"id\":\"2\"}},\"entity\":{\"data\":{\"type\":\"deals\",\"id\":\"3\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/document-template-renders')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"document-template-renders",
         "attributes":{
           "name":"Документ"
         },
         "relationships":{
           "document-template":{
             "data":{
               "type":"document-templates",
               "id":"2"
             }
           },
           "entity":{
             "data":{
               "type":"deals",
               "id":"3"
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"document-template-renders",
         "attributes":{
           "name":"Документ"
         },
         "relationships":{
           "document-template":{
             "data":{
               "type":"document-templates",
               "id":"2"
             }
           },
           "entity":{
             "data":{
               "type":"deals",
               "id":"3"
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/document-template-renders", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/document-template-renders',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"document-template-renders",
         "attributes":{
           "name":"Документ"
         },
         "relationships":{
           "document-template":{
             "data":{
               "type":"document-templates",
               "id":"2"
             }
           },
           "entity":{
             "data":{
               "type":"deals",
               "id":"3"
             }
           }
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/document-template-renders"

payload = json.dumps({
       "data":{
         "type":"document-template-renders",
         "attributes":{
           "name":"Документ"
         },
         "relationships":{
           "document-template":{
             "data":{
               "type":"document-templates",
               "id":"2"
             }
           },
           "entity":{
             "data":{
               "type":"deals",
               "id":"3"
             }
           }
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/document-template-renders'));
  request.body = json.encode({
       "data":{
         "type":"document-template-renders",
         "attributes":{
           "name":"Документ"
         },
         "relationships":{
           "document-template":{
             "data":{
               "type":"document-templates",
               "id":"2"
             }
           },
           "entity":{
             "data":{
               "type":"deals",
               "id":"3"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Атрибуты

Атрибуты документа

{
  "data": {
    "id": "2",
    "type": "document-template-renders",
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/document-template-renders/2"
    },
    "attributes": {
      "created-at": "2022-02-22T12:22:22.222+03:00",
      "updated-at": "2022-02-22T12:22:22.222+03:00",
      "name":"Документ"
    }
  }
}
Имя Тип Пример Запись Описание
name string Документ да Название
previous-responsible-id integer 100 нет Предыдущий ответственный

Фильтры

Получить список категорий документа созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/document-template-renders" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/document-template-renders?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/document-template-renders?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/document-template-renders?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/document-template-renders?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/document-template-renders?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/document-template-renders?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
document-template-id Вывести документы по шаблону документа filter[document-template-id]=2
created-at-gte Вывести документы созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести документы созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести документы обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести документы обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Шаблоны документов

Атрибуты

{
  "data": {
    "id": "2",
    "type": "document-templates",
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/document-templates/2"
    },
    "attributes": {
      "created-at": "2022-02-22T12:22:22.222+03:00",
      "updated-at": "2022-02-22T12:22:22.222+03:00",
      "name":"Шаблон",
      "description":"Описание",
      "template":"<p>тут будет html шаблон</p>",
      "active":true,
      "options":{},
      "file":{}
    }
  }
}
Имя Тип Пример Запись Описание
name* string Шаблон да Название
description string Описание да Описание
template text <p>тут будет html шаблон</p> да Шаблон HTML
active boolean true да Активность шаблона
options hash {"mail_subject"=>""} да Опции шаблона
file hash {"url"=>""} да Ссылка на файл шаблона

* Обязательные поля

Фильтры

Получить список шаблонов документов, созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/document-templates" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/document-templates?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/document-templates?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/document-templates?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/document-templates?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/document-templates?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/document-templates?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
document-template-category-id Вывести объекты по категории шаблона документа filter[document-template-category-id]=1
created-at-gte Вывести шаблоны созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести шаблоны созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести шаблоны обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести шаблоны обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Категории шаблонов документа

JSON API type document-template-categories
URL /api/v1/document-template-categories
Список GET /api/v1/document-template-categories
Создание POST /api/v1/document-template-categories
Чтение GET /api/v1/document-template-categories/{id}
Удаление DELETE /api/v1/document-template-categories/{id}

Создание категории шаблонов документов

curl "https://app.synergycrm.ru/api/v1/document-template-categories" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"document-template-categories",
         "attributes":{
           "name":"Категория",
           "purpose":"document",
           "position":2
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/document-template-categories");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"document-template-categories\",\"attributes\":{\"name\":\"Категория\",\"purpose\":\"document\",\"position\":2}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/document-template-categories')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"document-template-categories",
         "attributes":{
           "name":"Категория",
           "purpose":"document",
           "position":2
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"document-template-categories",
         "attributes":{
           "name":"Категория",
           "purpose":"document",
           "position":2
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/document-template-categories", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/document-template-categories',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"document-template-categories",
         "attributes":{
           "name":"Категория",
           "purpose":"document",
           "position":2
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/document-template-categories"

payload = json.dumps({
       "data":{
         "type":"document-template-categories",
         "attributes":{
           "name":"Категория",
           "purpose":"document",
           "position":2
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/document-template-categories'));
  request.body = json.encode({
       "data":{
         "type":"document-template-categories",
         "attributes":{
           "name":"Категория",
           "purpose":"document",
           "position":2
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Атрибуты

Атрибуты категорий шаблонов документов

{
  "data": {
    "id": "2",
    "type": "document-template-categories",
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/document-template-categories/2"
    },
    "attributes": {
      "created-at": "2022-02-22T12:22:22.222+03:00",
      "updated-at": "2022-02-22T12:22:22.222+03:00",
      "name":"Категория",
      "purpose":"document",
      "position":2
    }
  }
}
Имя Тип Пример Запись Описание
name* string Категория да Название
purpose string sms да Назначение шаблонов категории (смс, почтовые сообщения, документы)
position integer 2 да Позиция категории документа

* Обязательные поля

Ограничения по значениям

Аттрибут Варианты
purpose sms, mail, document

Фильтры

Получить список категорий шаблонов документов созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/document-template-categories" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/document-template-categories?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/document-template-categories?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/document-template-categories?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/document-template-categories?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/document-template-categories?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/document-template-categories?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести категории документв, созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести категории документв, созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести категории документв, обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести категории документв, обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Чеклисты

Создание чеклиста для задачи

curl "https://app.synergycrm.ru/api/v1/checklists" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"checklists",
         "attributes":{
           "name":"Чеклист из API"
         },
         "relationships":{
           "diary":{
             "data":{
               "type":"diaries",
               "id":"2"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/checklists");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"checklists\",\"attributes\":{\"name\":\"Чеклист из API\"},\"relationships\":{\"diary\":{\"data\":{\"type\":\"diaries\",\"id\":\"2\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/checklists')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"checklists",
         "attributes":{
           "name":"Чеклист из API"
         },
         "relationships":{
           "diary":{
             "data":{
               "type":"diaries",
               "id":"2"
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"checklists",
         "attributes":{
           "name":"Чеклист из API"
         },
         "relationships":{
           "diary":{
             "data":{
               "type":"diaries",
               "id":"2"
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/checklists", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/checklists',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"checklists",
         "attributes":{
           "name":"Чеклист из API"
         },
         "relationships":{
           "diary":{
             "data":{
               "type":"diaries",
               "id":"2"
             }
           }
         }
       }
     }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/checklists"

payload = json.dumps({
       "data":{
         "type":"checklists",
         "attributes":{
           "name":"Чеклист из API"
         },
         "relationships":{
           "diary":{
             "data":{
               "type":"diaries",
               "id":"2"
             }
           }
         }
       }
     })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/checklists'));
  request.body = json.encode({
       "data":{
         "type":"checklists",
         "attributes":{
           "name":"Чеклист из API"
         },
         "relationships":{
           "diary":{
             "data":{
               "type":"diaries",
               "id":"2"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type checklists
URL /api/v1/checklists
Список GET /api/v1/checklists
Чтение GET /api/v1/checklists/{id}
Создание POST /api/v1/checklists
Редактирование PATCH /api/v1/checklists/{id}
Удаление DELETE /api/v1/checklists/{id}

Атрибуты

Атрибуты чеклиста

{
  "data": {
      "type":"checklists",
      "id": 2,
      "attributes":{
        "name":"Наименование",
        "position": "2",
        "created-at":"2022-02-22T12:02:22.222+03:00",
        "updated-at":"2022-02-22T12:02:22.222+03:00"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Наименование да Название товара
position integer 2 да Порядковый номер
created-at datetime 2022-02-22T12:02:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:02:22.222+03:00 нет Дата обновления

* Обязательные поля

Связи

Пример данных (перечислены не все связи)

{
  "data": {
    "type":"checklists",
    "id":"2",
    "relationships":{
      "diary":{
        "links":{
          "self":"/api/v1/checklists/2/relationships/diaries",
          "related":"/api/v1/checklists/2/diary"
        }
      },
      "items":{
        "links":{
          "self":"/api/v1/checklists/2/relationships/items",
          "related":"/api/v1/checklists/2/items"
        }
      }
    }
  }
}
Название Связь JSON API type
Задача diary diaries
Создатель user users
Пункты чеклиста items checklist-items

Фильтры

Получить список чеклистов по запросу

curl -G "https://app.synergycrm.ru/api/v1/checklists/?filter[q]=Чеклист" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/checklists/?filter[q]=Чеклист");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/checklists/?filter[q]=Чеклист')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/checklists/?filter[q]=Чеклист", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/checklists/?filter[q]=Чеклист',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/checklists/?filter[q]=Чеклист"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/checklists/?filter[q]=Чеклист'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести чеклисты созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести чеклисты созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести чеклисты обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести чеклисты обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00
q Вывести чеклисты по поисковому запросу filter[q]=some-query

Пункты чеклистов

Создание нового пункта чеклиста

curl "https://app.synergycrm.ru/api/v1/checklist-items" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"checklist-items",
         "attributes":{
           "description":"Описание"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/checklist-items");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"checklist-items\",\"attributes\":{\"description\":\"Описание\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/checklist-items')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"checklist-items",
         "attributes":{
           "description":"Описание"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"checklist-items",
         "attributes":{
           "description":"Описание"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/checklist-items", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/checklist-items',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"checklist-items",
         "attributes":{
           "description":"Описание"
         }
       }
     }',

  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/checklist-items"

payload = json.dumps({
       "data":{
         "type":"checklist-items",
         "attributes":{
           "description":"Описание"
         }
       }
     })

headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/checklist-items'));
  request.body = json.encode({
       "data":{
         "type":"checklist-items",
         "attributes":{
           "description":"Описание"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
JSON API type checklist-items
URL /api/v1/checklist-items
Список GET /api/v1/checklist-items
Чтение GET /api/v1/checklist-items/{id}
Создание POST /api/v1/checklist-items
Редактирование PATCH /api/v1/checklist-items/{id}
Удаление DELETE /api/v1/checklist-items/{id}

Атрибуты

Атрибуты чек-листа

{
  "data": {
      "type":"checklist-items",
      "id":"2",
      "attributes":{
        "created-at":"2022-02-22T12:22:22.222+03:00",
        "updated-at":"2022-02-22T12:22:22.222+03:00",
        "description":"Описание",
        "position":2,
        "completed_at":"2022-02-22T12:22:22.222+03:00"
      }
   }
}
Имя Тип Пример Запись Описание
description* string Описание да Описание пункта чеклиста
position integer 2 да Порядковый номер
completed_at datetime 2022-02-22T12:22:22.222+03:00 да Дата завершения пункта чеклиста
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Группа контактов

JSON API type contact-groups
URL /api/v1/contact-groups
Список GET /api/v1/contact-groups
Создание POST /api/v1/contact-groups
Чтение GET /api/v1/contact-groups/{id}
Удаление DELETE /api/v1/contact-groups/{id}

Чтение группы

curl "https://app.synergycrm.ru/api/v1/contact-groups" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/contact-groups");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/contact-groups')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/contact-groups", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contact-groups',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/contact-groups"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/contact-groups'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Создание группы

curl "https://app.synergycrm.ru/api/v1/contact-groups" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"contact-groups",
         "attributes":{
           "name":"Группа",
           "color":"#fff",
           "description:"Описание",
         },
         "relationships":{
           "contact":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           }
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/contact-groups");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"contact-groups\",\"attributes\":{\"name\":\"Группа\",\"color\":\"#fff\",\"description:\"Описание\",},\"relationships\":{\"contact\":{\"data\":{\"type\":\"contacts\",\"id\":\"2\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/contact-groups')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"contact-groups",
         "attributes":{
           "name":"Группа",
           "color":"#fff",
           "description:"Описание",
         },
         "relationships":{
           "contact":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           }
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"contact-groups",
         "attributes":{
           "name":"Группа",
           "color":"#fff",
           "description:"Описание",
         },
         "relationships":{
           "contact":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           }
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/contact-groups", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contact-groups',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"contact-groups",
         "attributes":{
           "name":"Группа",
           "color":"#fff",
           "description:"Описание",
         },
         "relationships":{
           "contact":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           }
         }
       }
     }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/contact-groups"

payload = json.dumps({
       "data":{
         "type":"contact-groups",
         "attributes":{
           "name":"Группа",
           "color":"#fff",
           "description: "Описание",
         },
         "relationships":{
           "contact":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           }
         }
       }
     })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/contact-groups'));
  request.body = json.encode({
       "data":{
         "type":"contact-groups",
         "attributes":{
           "name":"Группа",
           "color":"#fff",
           "description:"Описание",
         },
         "relationships":{
           "contact":{
             "data":{
               "type":"contacts",
               "id":"2"
             }
           }
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Атрибуты

Атрибуты группы контактов

{
  "data": {
    "id": "1",
    "type": "contact-groups",
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/contact-groups/1"
    },
    "attributes": {
      "created-at": "2022-02-22T12:02:22.222+03:00",
      "updated-at": "2022-02-22T12:02:22.222+03:00",
      "cached-at": "2022-02-22T12:02:22.222+03:00",
      "name": "Группа",
      "description": "Описание",
      "color": "#fff",
      "responsible": null,
      "limit-participants": null
    }
  }
}
Имя Тип Пример Запись Описание
name string Группа да Название
description string Описание да Описание
color string #fff да Цвет
limit-participants integer 20 да Лимит участников
previous-responsible-id integer 100 нет Предыдущий ответственный

Связи

Пример данных (перечислены не все связи)

{
  "data": {
      "type":"contact-groups",
      "id":"2",
      "relationships":{
        "responsible":{
          "links":{
            "self":"/api/v1/contact-groups/2/relationships/responsible",
            "related":"/api/v1/contact-groups/2/responsible"
          }
        },
        "contacts":{
          "links":{
            "self":"/api/v1/contact-groups/2/relationships/contacts",
            "related":"/api/v1/contact-groups/2/contacts"
          }
        }
      }
   }
}

Пример запроса с загруженными отвественными

curl "https://app.synergycrm.ru/api/v1/contact-groups?include=responsible" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/contact-groups?include=responsible");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/contact-groups')
params = {
  :include => 'responsible',
}
uri.query = URI.encode_www_form(params)

req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/contact-groups?include=responsible", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contact-groups?include=responsible',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/contact-groups?include=responsible"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/contact-groups?include=responsible'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Ответственный responsible users
Создатель user users
Контакты contacts contacts
Счета invoices invoices
Платежи invoice-payments invoice-payments

Фильтры

Получить список групп контактов созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/contact-groups" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/contact-groups?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/contact-groups?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/contact-groups?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contact-groups?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/contact-groups?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/contact-groups?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
responsible-id Вывести группы с определённым ответственным filter[responsible-id]=2
user-id Вывести группы с определённым создателем filter[user-id]=2
created-at-gte Вывести группы созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести группы созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести группы обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести группы обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00
archived Вывести группы в архиве filter[archived]=2
discarded Вывести группы в корзине filter[discarded]=2
actual Вывести актуальные группы filter[actual]=2

Осмотры

Создание осмотра

curl "https://app.synergycrm.ru/api/v1/checkups" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"checkups",
         "attributes":{
           "name": "Осмотр из API",
           "description": "Описание"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/checkups");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"checkups\",\"attributes\":{\"name\": \"Осмотр из API\",\"description\": \"Описание\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/checkups')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
       "data":{
         "type":"checkups",
         "attributes":{
           "name": "Осмотр из API",
           "description": "Описание"
         }
       }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
       "data":{
         "type":"checkups",
         "attributes":{
           "name": "Осмотр из API",
           "description": "Описание"
         }
       }
     }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/checkups", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/checkups',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
       "data":{
         "type":"checkups",
         "attributes":{
           "name": "Осмотр из API",
           "description": "Описание"
         }
       }
     }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/checkups"

payload = json.dumps({
       "data":{
         "type":"checkups",
         "attributes":{
           "name": "Осмотр из API",
           "description": "Описание"
         }
       }
     })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/checkups'));
  request.body = json.encode({
       "data":{
         "type":"checkups",
         "attributes":{
           "name": "Осмотр из API",
           "description": "Описание"
         }
       }
     });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type checkups
URL /api/v1/checkups
Список GET /api/v1/checkups
Чтение GET /api/v1/checkups/{id}
Создание POST /api/v1/checkups
Редактирование PATCH /api/v1/checkups/{id}
Удаление DELETE /api/v1/checkups/{id}

Атрибуты

Атрибуты осмотра

{
  "data": {
      "type":"checkups",
      "id": 2,
      "attributes":{
        "name":"Наименование",
        "number": "2",
        "description": "Описание",
        "created-at":"2022-02-22T12:02:22.222+03:00",
        "updated-at":"2022-02-22T12:02:22.222+03:00"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Наименование да Название
number integer 2 да Номер
description text Описание да Описание
previous-responsible-id integer 100 нет Предыдущий ответственный
created-at datetime 2022-02-22T12:02:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:02:22.222+03:00 нет Дата обновления

* Обязательные поля

Связи

Пример данных (перечислены не все связи)

{
  "data": {
    "type":"checkups",
    "id":"2",
    "relationships":{
      "user":{
        "links":{
          "self":"/api/v1/checkups/2/relationships/user",
          "related":"http://localhost:3000/api/v1/checkups/2/user"
        }
      },
      "contact":{
        "links":{
          "self":"/api/v1/checkups/2/relationships/contact",
          "related":"/api/v1/checkups/2/contact"
        }
      }
    }
  }
}
Название Связь JSON API type
Создатель user users
Контакт contact contacts
Ответственный responsible users
Задачи diaries diaries
Контакты contacts contacts
Сделки deals deals
Заявки orders orders
Записи entries entries
Продукты products products
Контракты contracts contracts
Документы document-template-renders document-template-renders
Компании companies companies

Фильтры

Получить список осмотров по запросу

curl -G "https://app.synergycrm.ru/api/v1/checkups/?filter[q]=Осмотр" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/checkups/?filter[q]=Осмотр");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/checkups/?filter[q]=Осмотр')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/checkups/?filter[q]=Осмотр", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/checkups/?filter[q]=Осмотр',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/checkups/?filter[q]=Осмотр "

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/checkups/?filter[q]=Осмотр'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести осмотры созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести осмотры созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести осмотры обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести осмотры обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00
discarded-at-gte Вывести осмотры в корзине после указанного времени filter[discarded-at-gte]=2022.02.22 12:00
discarded-at-lte Вывести осмотры в корзине до указанного времени filter[discarded-at-lte]=2022.02.22 12:00
responsible-id Вывести осмотры по определенному ответственному filter[responsible-id]=2
user-id Вывести осмотры по определенному создателю filter[user-id]=2
archived Вывести осмотры в архиве filter[archived]=2
discarded Вывести осмотры в корзине filter[discarded]=2
actual Вывести актуальные осмотры filter[actual]=2
discarded-at-null Вывести осмотры не в корзине filter[discarded-at-null]=true
table-state-id Вывести осмотры по заданному табличному фильтру filter[table-state-id]=2
q Вывести осмотры по поисковому запросу filter[q]=some-query

Склады

Создание нового склада продуктов

curl "https://app.synergycrm.ru/api/v1/stores" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
       "data":{
         "type":"stores",
         "attributes":{
           "created-at":"2022-02-22T12:22:22.222+03:00",
           "updated-at":"2022-02-22T12:22:22.222+03:00",
           "name":"Категория по API"
         }
       }
     }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/stores");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\":{\"type\":\"stores\",\"attributes\":{\"created-at\":\"2022-02-22T12:22:22.222+03:00\",\"updated-at\":\"2022-02-22T12:22:22.222+03:00\",\"name\":\"Категория по API\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/stores')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{       
   "data":{         
      "type":"stores",         
      "attributes":{           
         "created-at":"2022-02-22T12:22:22.222+03:00",           
         "updated-at":"2022-02-22T12:22:22.222+03:00",           
         "name":"Категория по API"         
         }       
      }     
   }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{       
   "data":{         
      "type":"stores",         
      "attributes":{           
         "created-at":"2022-02-22T12:22:22.222+03:00",           "updated-at":"2022-02-22T12:22:22.222+03:00",           
         "name":"Категория по API"         
         }       
      }     
   }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/stores", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/stores',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{       
   "data":{         
      "type":"stores",         
      "attributes":{           
         "created-at":"2022-02-22T12:22:22.222+03:00",           "updated-at":"2022-02-22T12:22:22.222+03:00",           
         "name":"Категория по API"         
         }       
      }     
   }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/stores"

payload = json.dumps({       
   "data":{         
      "type":"stores",         
      "attributes":{           
         "created-at":"2022-02-22T12:22:22.222+03:00",           "updated-at":"2022-02-22T12:22:22.222+03:00",           
         "name":"Категория по API"         
         }       
      }     
   })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/stores'));
  request.body = json.encode({       
   "data":{         
      "type":"stores",         
      "attributes":{           
         "created-at":"2022-02-22T12:22:22.222+03:00",           "updated-at":"2022-02-22T12:22:22.222+03:00",           
         "name":"Категория по API"         
         }       
      }     
   });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type stores
URL /api/v1/stores
Список GET /api/v1/stores
Чтение GET /api/v1/stores/{id}
Создание POST /api/v1/stores
Редактирование PATCH /api/v1/stores/{id}
Удаление DELETE /api/v1/stores/{id}

Атрибуты

Атрибуты склада

{
  "data": {
      "type":"stores",
      "id":"2",
      "attributes":{
        "name": "Мой склад в Москве"
      }
   }
}
Имя Тип Пример Запись Описание
name* string Мой склад в Москве да Название склада
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

* Обязательные поля

Фильтры

Получить список складов продуктов созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/stores" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/stores?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/stores?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/stores?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/stores?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/stores?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text) 

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/stores?filter[created-at-gte]=2022.02.22 12:00'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
created-at-gte Вывести склады созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести склады созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести склады обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести склады обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Остатки

Получить остатки прдуктов на определённом складе

curl -G "https://app.synergycrm.ru/api/v1/stores/2/product-balances" \
  -X GET \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/stores/2/product-balances");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/stores/2/product-balances')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/stores/2/product-balances", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/stores/2/product-balances',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/stores/2/product-balances"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text) 

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/stores/2/product-balances'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Получить остатки определённого продукта на складах

curl -G "https://app.synergycrm.ru/api/v1/products/2/store-balances" \
  -X GET \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/products/2/store-balances");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/products/2/store-balances')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/products/2/store-balances", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/products/2/store-balances',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/products/2/store-balances"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text) 

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/products/2/store-balances'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type product-by-stores
Остатки по складу GET /api/v1/stores/{id}/product-balances
Остатки по продукту GET /api/v1/products/{id}/store-balances

Атрибуты

Атрибуты остатков продукта на складе

{
    "data":
    [
        {
            "id": "2",
            "type": "product-by-stores",
            "links":
            {
                "self": "https://app.synergycrm.ru/api/v1/product-by-stores/2"
            },
            "attributes":
            {
                "created-at": "2022-02-22T12:22:22.222+03:00",
                "updated-at": "2022-02-22T12:22:22.222+03:00",
                "cached-at": "2022-02-22T12:22:22.222+03:00",
                "stock-quantity": "2.0",
                "reserved-quantity": null,
                "available-quantity": "2.0",
                "waiting-quantity": null,
                "product-id": 2,
                "store-id": 2
            },
            "relationships":
            {
                "store":
                {
                    "links":
                    {
                        "self": "https://app.synergycrm.ru/api/v1/product-by-stores/2/relationships/store",
                        "related": "https://app.synergycrm.ru/api/v1/product-by-stores/2/store"
                    }
                },
                "product":
                {
                    "links":
                    {
                        "self": "https://app.synergycrm.ru/api/v1/product-by-stores/2/relationships/product",
                        "related": "https://app.synergycrm.ru/api/v1/product-by-stores/2/product"
                    }
                }
            }
        }
    ]
}
Имя Тип Пример Запись Описание
stock-quantity decimal 2.0 нет Общее количество позиций
available-quantity decimal 2.0 нет Доступное количество
reserved-quantity decimal 0.0 нет Зарезервировано для продажи
waiting-quantity decimal 0.0 нет Ожидается от поставщика
product-id integer 2 нет id продукта
stock-id integer 2 нет id склада
created-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

Позиции складской операции

Пример данных для создания позиции складской операции. Обязательно необходимо указать складскую операцию operation и продукт product. Cвязь store-storage является обязательной при добавлении позиции в такие операции, как: 'Отборка товаров из мест хранения', 'Выдача грузов' и 'Формирование отправок'. Связь complectation-productявляется обязательной для операции 'Списание', при условии, если списание товара происходит с места комплектации.

{
    "data":{
      "type":"store-positions",
      "attributes":{
        "quantity":2,
        "amount":222.2,
        "discount":20
      },
      "relationships":{
        "product":{
          "data":{
            "type":"products",
            "id":2
          }
        },
        "operation":{
          "data":{
            "type":"store-operations",
            "id":2
          }
        },
        "store-storage":{
          "data":{
            "type":"store-storages",
            "id":2
          }
        },
        "complectation-product":{
          "data":{
            "type":"store-complectation-products",
            "id":2
          }
        }
      }
    }
  }
JSON API type store-positions
URL /api/v1/store-positions
Список GET /api/v1/store-positions
Чтение GET /api/v1/store-positions/{id}
Создание POST /api/v1/store-positions
Редактирование PATCH /api/v1/store-positions/{id}
Удаление DELETE /api/v1/store-positions/{id}

Атрибуты

Имя Тип Пример Запись Описание
name string Товар да Переопределенное наименование товара
quantity integer 2 да Количество товара
discount decimal 20.0 да Скидка на товар (в процентах)
discount-amount decimal 200.0 нет Сумма скидки
amount decimal 1000.0 да Сумма позиции
amount-with-discount decimal 800,0 нет Сумма позиции с учетом скидки
is-service boolean false нет Товар (false) или услуга (true)
unit string 'шт' нет Единица измерения
code code '123123' нет Код товара

Связи

Загрузка позиций по определенной операции (id = 2)

curl "https://app.synergycrm.ru/api/v1/store-operations/2/relationships/store_positions" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/store-operations/2/relationships/store_positions");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/store-operations/2/relationships/store_positions')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/store-operations/2/relationships/store_positions", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/store-operations/2/relationships/store_positions',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/store-operations/2/relationships/store_positions"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/store-operations/2/relationships/store_positions'));

  request.headers.addAll(headers);

  http.StreamedResponse response = await request.send();

  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Название Связь JSON API type
Складская операция operation store-operations
Продукт product products
Место хранения store-storage store-storages
Позиция в месте комплектации complectation-product store-complectation-products

Фильтры

Получить список складов продуктов созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/store-positions" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00'));

  request.headers.addAll(headers);

  http.StreamedResponse response = await request.send();

  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести позиции в складской операции созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести позиции в складской операции созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести позиции в складской операции обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести позиции в складской операции обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00

Складские операции

{
   "data":{
      "id":"2",
      "type":"store-operations",
      "links":{
         "self":"https://app.synergycrm.ru/api/v1/store-operations/2"
      },
      "attributes":{
         "number":2,
         "kind":"order_supplier",
         "description":null,
         "datetime":"2022-02-22T12:22:22.222+03:00",
         "overhead-costs":"0.0",
         "overhead-type":"amount",
         "reservation-active":false,
         "waiting-active":false,
         "vat-active":true,
         "vat-in-price":true,
         "archived-at":null,
         "discarded-at":null,
         "status":"executing",
         "amount":"20000.0",
         "total-vat":"0.0",
         "executed-at":null,
         "canceled-at":null,
         "previous-responsible-id":null,
         "created-at":"2022-02-22T12:22:22.222+03:00",
         "updated-at":"2022-02-22T12:22:22.222+03:00",
         "cached-at":"2022-02-22T12:22:22.222+03:00",
      },
      "relationships":{
         "responsible":{
            "links":{
               "self":"https://app.synergycrm.ru/api/v1/store-operations/2/relationships/responsible",
               "related":"https://app.synergycrm.ru/api/v1/store-operations/2/responsible"
            }
         },
         "org-detail":{
            "links":{
               "self":"https://app.synergycrm.ru/api/v1/store-operations/2/relationships/org-detail",
               "related":"https://app.synergycrm.ru/api/v1/store-operations/2/org-detail"
            }
         },
         "store":{
            "links":{
               "self":"https://app.synergycrm.ru/api/v1/store-operations/2/relationships/store",
               "related":"https://app.synergycrm.ru/api/v1/store-operations/2/store"
            }
         },
         "invoices":{
            "links":{
               "self":"https://app.synergycrm.ru/api/v1/store-operations/2/relationships/invoices",
               "related":"https://app.synergycrm.ru/api/v1/store-operations/2/invoices"
            }
         },
         "positions":{
            "links":{
               "self":"https://app.synergycrm.ru/api/v1/store-operations/2/relationships/positions",
               "related":"https://app.synergycrm.ru/api/v1/store-operations/2/positions"
            }
         }
      }
   }
}
JSON API type store-operations
URL /api/v1/store-operations
Список GET /api/v1/store-operations
Чтение GET /api/v1/store-operations/{id}
Создание POST /api/v1/store-operations
Редактирование PATCH /api/v1/store-operations/{id}
Удаление DELETE /api/v1/store-operations/{id}
Провести POST /api/v1/store-operations/{id}/execute
Отменить POST /api/v1/store-operations/{id}/cancel

Атрибуты

Имя Тип Пример Запись Описание
number integer 2 да Порядковый номер
kind string order_supplier да Тип операции
description text text да Описание
datetime datetime 2022-02-22T12:22:22.222+03:00 да От
overhead-costs decimal 0.0 да Накл. расходы
overhead-type string amount да Тип накл. расходов
reservation-active boolean false да Резерв
waiting-active boolean true да Ожидание
vat-active boolean true да НДС
vat-in-price boolean true да Цена включает НДС
status string executing нет Статус
amount decimal 20000.0 нет Сумма
total-vat decimal 20 нет Сумма НДС
executed-at datetime 2022-02-22T12:22:22.222+03:00 нет Проведено
canceled-at datetime 2022-02-22T12:22:22.222+03:00 нет Отменено
previous-responsible-id integer 2 нет Предыдущий ответственный

Связи

Название Связь JSON API type
Контрагент contractor companies, contacts
Ответственный responsible users
Организация org-detail org-details
Со склада store stores
На склад to-store stores
Грузополучатель consignee companies, contacts
Сделка deal deals
Заявка order orders
Основание parent store-operations
Счета invoices invoices
Позиции store-positions store-positions
Место комплектации store-complectation store-complectations
С места хранения store-storage store-storages
На место хранения to-store-storage store-storages
На основании inventory store-inventories
Разгрузка автотранспорта unload-operation store-operations

Фильтры

Получить список складов продуктов созданных до определённой даты

curl -G "https://app.synergycrm.ru/api/v1/store-positions" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[created-at-gte]=2022.02.22 12:00"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00'));

  request.headers.addAll(headers);

  http.StreamedResponse response = await request.send();

  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
created-at-gte Вывести операции созданные после указанного времени filter[created-at-gte]=2022.02.22 12:00
created-at-lte Вывести операции созданные до указанного времени filter[created-at-lte]=2022.02.22 12:00
updated-at-gte Вывести операции обновлённые после указанного времени filter[updated-at-gte]=2022.02.22 12:00
updated-at-lte Вывести операции обновлённые до указанного времени filter[updated-at-lte]=2022.02.22 12:00
datetime-gte Вывести операции с датой "От" после указанного времени filter[datetime-at-gte]=2022.02.22 12:00
datetime-lte Вывести операции с датой "От" до указанного времени filter[datetime-at-lte]=2022.02.22 12:00
archived-at-gte Вывести операции в архиве после указанного времени filter[archived-at-gte]=2022.02.22 12:00
archived-at-lte Вывести операции в архиве до указанного времени filter[archived-at-lte]=2022.02.22 12:00
archived-at-null Вывести операции не в архиве filter[archived-at-null]=true
discarded-at-gte Вывести операции в корзине после указанного времени filter[discarded-at-gte]=2022.02.22 12:00
discarded-at-lte Вывести операции в корзине до указанного времени filter[discarded-at-lte]=2022.02.22 12:00
discarded-at-null Вывести операции не в корзине filter[discarded-at-null]=true
executed-at-gte Вывести операции проведенные после указанного времени filter[executed-at-gte]=2022.02.22 12:00
executed-at-lte Вывести операции проведенные до указанного времени filter[executed-at-lte]=2022.02.22 12:00
executed-at-null Вывести не проведенные операции filter[executed-at-null]=true
canceled-at-gte Вывести операции отмененные после указанного времени filter[canceled-at-gte]=2022.02.22 12:00
canceled-at-lte Вывести операции отмененные до указанного времени filter[canceled-at-lte]=2022.02.22 12:00
canceled-at-null Вывести не отмененные операции filter[canceled-at-null]=true

Список товаров/услуг доступных для добавления в операцию

JSON API type products
Список GET /api/v1/store-operations/{id}/available-products

Дополнительные аттрибуты для списка продуктов

Помимо аттрибутов из products, могут приходить такие аттрибуты как:

Имя Тип Пример Запись Описание
quantity-for-create float 2.0 нет Доступное количество товара/услуги
store-complectation-product-id integer 2 нет Связь с товаром в месте комплектации
storage-name string Палета нет Название места хранения
store-storage-id integer 1 нет Связь с местом хранения

Атрибуты quantity-for-create и storage-name являются информационными. При получении атрибута store-storage-id или store-complectation-product-id, необходимо их значение использовать для связей при создании позиции в операции.

Пример данных в теле запроса при создании позиции в операции списания, если списание происходит с места комплектации

{
   "data":{
      "type":"store-positions",
      "attributes":{
         "quantity":2
      },
      "relationships":{
        "product":{
            "data":{
               "type":"products",
               "id":"6"
            }
         },
         "operation":{
            "data":{
               "type":"store-operations",
               "id":"140"
            }
         },
         "complectation-product":{
           "data":{
             "type":"store-complectation-products",
             "id":"4"
           }
         }
      }
   }
}

Пример данных в теле запроса при создании позиции в операции, если необходимо указать связь со store-storages

{
   "data":{
      "type":"store-positions",
      "attributes":{
         "quantity":2
      },
      "relationships":{
        "product":{
            "data":{
               "type":"products",
               "id":"6"
            }
         },
         "operation":{
            "data":{
               "type":"store-operations",
               "id":"140"
            }
         },
         "store-storage":{
           "data":{
             "type":"store-storages",
             "id":"4"
           }
         }
      }
   }
}

Создание заказа поставщику

Создание заказа поставщику

{
   "data":{
      "type":"store-operations",
      "attributes":{
         "kind":"order_supplier",
         "datetime":"2022-02-22T12:22:22.222+03:00",
      },
      "relationships":{
         "responsible":{
            "data":{
               "type":"users",
               "id":"2"
            }
         },
         "org-detail":{
            "data":{
               "type":"org-details",
               "id":"2"
            }
         },
         "to-store":{
            "data":{
               "type":"stores",
               "id":"2"
            }
         },
         "contractor":{
            "data":{
               "type":"companies",
               "id":"2"
            }
         }
      }
   }
}

Создание приемки

Создание приемки Связь unload-operation указывается в случае, если приемка осуществляется на основании операции разгрузки автотранспорта

{
   "data":{
      "type":"store-operations",
      "attributes":{
         "kind":"acceptance",
         "datetime":"2022-02-22T12:22:22.222+03:00",
      },
      "relationships":{
         "responsible":{
            "data":{
               "type":"users",
               "id":"2"
            }
         },
         "org-detail":{
            "data":{
               "type":"org-details",
               "id":"2"
            }
         },
         "to-store":{
            "data":{
               "type":"stores",
               "id":"2"
            }
         },
         "contractor":{
            "data":{
               "type":"companies",
               "id":"2"
            }
         },
         "unload-operation":{
            "data":{
               "type":"store-operations",
               "id":2
            }
         }
      }
   }
}

Создание оприходования

Создание оприходования

{
   "data":{
      "type":"store-operations",
      "attributes":{
         "kind":"enter",
         "datetime":"2022-02-22T12:22:22.222+03:00",
      },
      "relationships":{
         "responsible":{
            "data":{
               "type":"users",
               "id":"2"
            }
         },
         "org-detail":{
            "data":{
               "type":"org-details",
               "id":"2"
            }
         },
         "to-store":{
            "data":{
               "type":"stores",
               "id":"2"
            }
         }
      }
   }
}

Создание оприходования излишков

Создание оприходования излишков Данная операция подразумевает оприходование на основании проведенной инвентаризации, поэтому связь с store-inventory является обязательной.

{
   "data":{
      "type":"store-operations",
      "attributes":{
         "kind":"enter_over",
         "datetime":"2022-02-22T12:22:22.222+03:00",
      },
      "relationships":{
         "responsible":{
            "data":{
               "type":"users",
               "id":"2"
            }
         },
         "org-detail":{
            "data":{
               "type":"org-details",
               "id":"2"
            }
         },
         "to-store":{
            "data":{
               "type":"stores",
               "id":"2"
            }
         },
         "store-inventory":{
            "data":{
               "type":"store-inventories",
               "id":"2"
            }
         }
      }
   }
}

Создание заказа покупателя

Создание заказа покупателя

{
   "data":{
      "type":"store-operations",
      "attributes":{
         "kind":"order_buyer",
         "datetime":"2022-02-22T12:22:22.222+03:00",
      },
      "relationships":{
         "responsible":{
            "data":{
               "type":"users",
               "id":"2"
            }
         },
         "org-detail":{
            "data":{
               "type":"org-details",
               "id":"2"
            }
         },
         "store":{
            "data":{
               "type":"stores",
               "id":"2"
            }
         },
         "contractor":{
            "data":{
               "type":"companies",
               "id":"2"
            }
         },
         "consignee":{
            "data":{
               "type":"contacts",
               "id":"2"
            }
         },
         "deal":{
            "data":{
               "type":"deals",
               "id":"6"
            }
         },
         "order":{
            "data":{
               "type":"orders",
               "id":"2"
            }
         }
      }
   }
}

Создание отгрузки

Создание отгрузки

{
   "data":{
      "type":"store-operations",
      "attributes":{
         "kind":"shipping",
         "datetime":"2022-02-22T12:22:22.222+03:00",
      },
      "relationships":{
         "responsible":{
            "data":{
               "type":"users",
               "id":"2"
            }
         },
         "org-detail":{
            "data":{
               "type":"org-details",
               "id":"2"
            }
         },
         "store":{
            "data":{
               "type":"stores",
               "id":"2"
            }
         },
         "contractor":{
            "data":{
               "type":"companies",
               "id":"2"
            }
         },
         "consignee":{
            "data":{
               "type":"contacts",
               "id":"2"
            }
         },
         "deal":{
            "data":{
               "type":"deals",
               "id":"2"
            }
         },
         "order":{
            "data":{
               "type":"orders",
               "id":"2"
            }
         }
      }
   }
}

Создание списания

Создание списания Списание проводится нераспределенных товаров, товаров находящихся на местах комплектации, товаров с мест хранения, а так же на основе инвентаризации. Для списания нераспределенных товаров, связи store-storage, store-complecation являются необязательными. Для списания с места хранения, необходимо указать связь store-storage. Для списания с места комплектации, необходимо указать связь store-complectation. Связь с инвентаризацией store-inventory является опциональной.

{
   "data":{
      "type":"store-operations",
      "attributes":{
         "kind":"write_off",
         "datetime":"2022-02-22T12:22:22.222+03:00",
      },
      "relationships":{
         "responsible":{
            "data":{
               "type":"users",
               "id":"2"
            }
         },
         "org-detail":{
            "data":{
               "type":"org-details",
               "id":"2"
            }
         },
         "store":{
            "data":{
               "type":"stores",
               "id":"2"
            }
         },
         "store-storage":{
            "data":{
               "type":"store-storages",
               "id":"2"
            }
         },
         "store-complectation":{
            "data":{
               "type":"store-complectations",
               "id":"2"
            }
         },
         "store-inventory":{
            "data":{
               "type":"store-inventories",
               "id":"2"
            }
         }
      }
   }
}

Создание перемещения

Создание перемещения

{
   "data":{
      "type":"store-operations",
      "attributes":{
         "kind":"transfer",
         "datetime":"2023-04-06T10:26:22.222+03:00"
      },
      "relationships":{
        "org-detail":{
            "data":{
               "type":"org-details",
               "id":1
            }
         },
         "store":{
            "data":{
               "type":"stores",
               "id":"1"
            }
         },
         "to-store":{
           "data":{
             "type":"stores",
             "id":"2"
           }
         }
      }
   }
}

Создание формирования отправок

Создание формирования отправок

{
   "data":{
      "type":"store-operations",
      "attributes":{
         "kind":"forming_shipments",
         "datetime":"2023-04-06T10:26:22.222+03:00"
      },
      "relationships":{
        "org-detail":{
            "data":{
               "type":"org-details",
               "id":1
            }
         },
         "store":{
            "data":{
               "type":"stores",
               "id":"2"
            }
         },
         "store-complectation":{
           "data":{
             "type":"store-complectations",
             "id":"2"
           }
         }
      }
   }
}

Создание выдача грузов

Создание выдача грузов

{
   "data":{
      "type":"store-operations",
      "attributes":{
         "kind":"goods_delivery",
         "datetime":"2023-04-06T10:26:22.222+03:00"
      },
      "relationships":{
        "org-detail":{
            "data":{
               "type":"org-details",
               "id":1
            }
         },
         "store":{
            "data":{
               "type":"stores",
               "id":"2"
            }
         }
      }
   }
}

Создание отборка товаров из мест хранения

Создание отборка товаров из мест хранения

{
   "data":{
      "type":"store-operations",
      "attributes":{
         "kind":"moving_store_storage",
         "datetime":"2023-04-06T10:26:22.222+03:00"
      },
      "relationships":{
        "org-detail":{
            "data":{
               "type":"org-details",
               "id":1
            }
         },
         "store":{
            "data":{
               "type":"stores",
               "id":"2"
            }
         },
         "store-storage":{
            "data":{
               "type":"store-storages",
               "id":"15"
            }
         },
         "to-store-storage":{
            "data":{
               "type":"store-storages",
               "id":"13"
            }
         }
      }
   }
}

Создание комплектование и упаковка

Создание комплектование и упаковка

{
   "data":{
      "type":"store-operations",
      "attributes":{
         "kind":"pack",
         "datetime":"2023-04-06T10:26:22.222+03:00"
      },
      "relationships":{
        "org-detail":{
            "data":{
               "type":"org-details",
               "id":1
            }
         },
         "store":{
            "data":{
               "type":"stores",
               "id":"2"
            }
         },
         "store-complectation":{
           "data":{
             "type":"store-complectations",
             "id":"2"
           }
         }
      }
   }
}

Создание разгрузка транспорта

Создание разгрузка транспорта

{
   "data":{
      "type":"store-operations",
      "attributes":{
         "kind":"transport_unloading",
         "datetime":"2023-04-06T10:26:22.222+03:00"
      },
      "relationships":{
        "org-detail":{
            "data":{
               "type":"org-details",
               "id":1
            }
         },
         "to-store":{
            "data":{
               "type":"stores",
               "id":"2"
            }
         }
      }
   }
}

Места хранения

Пример данных для создания места хранения. Обязательными являются аттрибут name и связь со складом store, аттрибут code является опциональным.

{
  "data":{
    "type":"store-storages",
    "attributes":{
      "name":"MyStorage",
      "code":"123456"
    },
    "relationships":{
      "store":{
        "data":{
          "type":"stores",
          "id":2
        }
      }
    }
  }
}
JSON API type store-storages
URL /api/v1/store-storages
Список GET /api/v1/store-storages
Чтение GET /api/v1/store-storages/{id}
Создание POST /api/v1/store-storages
Редактирование PATCH /api/v1/store-storages/{id}
Удаление DELETE /api/v1/store-storages/{id}

Атрибуты

Имя Тип Пример Запись Описание
number integer 2 нет Порядковый номер
name string Палета да Название места хранения
code string 1234567 да Код места хранения

Связи

Название Связь JSON API type
Склад store stores

Загрузка позиций с определенного места хранения (id = 14)

curl "https://app.synergycrm.ru/api/v1/store-storages/14/relationships/store-storage-products" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/store-storages/14/relationships/store-storage-products");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/store-storages/14/relationships/store-storage-products')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/store-storages/14/relationships/store-storage-products", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/store-storages/14/relationships/store-storage-products',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/store-storages/14/relationships/store-storage-products"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/store-storages/14/relationships/store-storage-products'));

  request.headers.addAll(headers);

  http.StreamedResponse response = await request.send();

  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Позиции на месте хранения

Пример данных для создания позиции на месте хранения. Обязательно необходимо указать связи с местом хранения store-storage, продуктом product и количество. Имя позиции подтягивается из имени продукта.

{
  "data":{
    "type":"store-storage-products",
    "attributes":{
      "quantity":5
    },
    "relationships":{
      "store-storage":{
        "data":{
          "type":"store-storages",
          "id":15
        }
      },
      "product":{
        "data":{
          "type":"products",
          "id":7
        }
      }
    }
  }
}
JSON API type store-storage-products
URL /api/v1/store-storage-products
Список GET /api/v1/store-storage-products
Чтение GET /api/v1/store-storage-products/{id}
Создание POST /api/v1/store-storage-products
Редактирование PATCH /api/v1/store-storage-products/{id}
Удаление DELETE /api/v1/store-storage-products/{id}

Атрибуты

Имя Тип Пример Запись Описание
name string Продукт нет Название продукта в позиции
quantity float 0.0 да Количество

Связи

Название Связь JSON API type
Место хранения store-storage store-storages
Продукт store-storage-product store-storage-products

Список товаров доступных для добавления на место хранения

JSON API type products
Список GET /api/v1/store-storages/{id}/available-products

Места комплектации

Пример данных для создания места комплектации Для создания места комплектации в атрибутах необходимо передать name, опицонально code, и обязательную связь со складом store.

{
  "data":{
    "type":"store-complectations",
    "attributes":{
      "name":"Vivoz999",
      "code":"123324"
    },
    "relationships":{
      "store":{
        "data":{
          "type":"stores",
          "id":2
        }
      }
    }
  }
}
JSON API type store-complectations
URL /api/v1/store-complectations
Список GET /api/v1/store-complectations
Чтение GET /api/v1/store-complectations/{id}
Создание POST /api/v1/store-complectations
Редактирование PATCH /api/v1/store-complectations/{id}
Удаление DELETE /api/v1/store-complectations/{id}

Атрибуты

Имя Тип Пример Запись Описание
number integer 2 нет Порядковый номер
name string Палета да Название места хранения
code string 1234567 да Код места хранения

Связи

Название Связь JSON API type
Склад store stores
Позиции на комплектации store-complectation-products store-complectation-products

Загрузка позиций с определенного места комплектации (id = 2)

curl "https://app.synergycrm.ru/api/v1/store-complectations/2/relationships/store-complectation-products" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/store-complectations/2/relationships/store-complectation-products");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/store-complectations/2/relationships/store-complectation-products')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/store-complectations/2/relationships/store-complectation-products", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/store-complectations/2/relationships/store-complectation-products',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/store-complectations/2/relationships/store-complectation-products"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/store-complectations/2/relationships/store-complectation-products'));

  request.headers.addAll(headers);

  http.StreamedResponse response = await request.send();

  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}

Инвентаризация

Пример данных для создания инвентаризации. Никаких аттрибутов передавать не надо, аттрибут name генерируется на стороне сервера.

{
  "data": {
    "type": "store-inventories"
  }
}
JSON API type store-inventories
URL /api/v1/store-inventories
Список GET /api/v1/store-inventories
Чтение GET /api/v1/store-inventories/{id}
Создание POST /api/v1/store-inventories
Редактирование PATCH /api/v1/store-inventories/{id}
Удаление DELETE /api/v1/store-inventories/{id}
Провести POST /api/v1/store-inventories/{id}/execute
Отменить POST /api/v1/store-inventories/{id}/cancel

Атрибуты

Имя Тип Пример Запись Описание
number integer 2 нет Порядковый номер
name string Инвентаризация № 2 от 01.01.2023 нет Название инвентаризации
status string completed нет Статус инвентаризации
executed-at datetime 2022-02-22T12:22:22.222+03:00 нет Проведено

Связи

Загрузка позиций с из инвентаризации (id = 11)

curl "http://app.synergycrm.ru/api/v1/store-inventories/11/relationships/store-inventory-positions" \
  -X GET \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("http://app.synergycrm.ru/api/v1/store-inventories/11/relationships/store-inventory-positions");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('http://app.synergycrm.ru/api/v1/store-inventories/11/relationships/store-inventory-positions')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "http://app.synergycrm.ru/api/v1/store-inventories/11/relationships/store-inventory-positions", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'http://app.synergycrm.ru/api/v1/store-inventories/11/relationships/store-inventory-positions',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "http://app.synergycrm.ru/api/v1/store-inventories/11/relationships/store-inventory-positions"

payload={}
headers = {
  'Content-Type': 'application/vnd.api+json',
  'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('http://app.synergycrm.ru/api/v1/store-inventories/11/relationships/store-inventory-positions'));

  request.headers.addAll(headers);

  http.StreamedResponse response = await request.send();

  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
}
Фильтр Описание Пример
executed-at-gte Вывести операции проведенные после указанного времени filter[executed-at-gte]=2022.02.22 12:00
executed-at-lte Вывести операции проведенные до указанного времени filter[executed-at-lte]=2022.02.22 12:00
executed-at-null Вывести не проведенные операции filter[executed-at-null]=true

Позиции в инвентаризации

Пример данных для создания позиции в инвентаризации Из аттрибутов необходимо передать quantity. Связи store-inventory и product обязательны.

{
  "data":{
    "type":"store-inventory-positions",
    "attributes":{
      "quantity":10
    },
    "relationships":{
      "product":{
        "data":{
          "type":"products",
          "id":7
        }
      },
      "store-inventory":{
        "data":{
          "type":"store-inventories",
          "id":7
        }
      }
    }
  }
}
JSON API type store-inventory-positions
URL /api/v1/store-inventory-positions
Список GET /api/v1/store-inventory-positions
Чтение GET /api/v1/store-inventory-positions/{id}
Создание POST /api/v1/store-inventory-positions
Редактирование PATCH /api/v1/store-inventory-positions/{id}
Удаление DELETE /api/v1/store-inventory-positions/{id}

Атрибуты

Имя Тип Пример Запись Описание
name string Продукт 1 нет Название продукта
quantity float 10.0 да Количество продукта в позиции
real_quantity float 10.0 нет Реальное количество после проведения инвентаризации
result json {} нет Информация о нахождении товара

Атрибут result

Пример хранящихся данных в атрибуте result Когда товара нет на складах, атрибут содержит пустое значени - {} store_storage - места хранения; name - название места; quantity - количество; not_distributed - нераспределенное количество; store_complectation - места комплектации.

{
  "result": {
          "store_storage": [
            {
              "name": "Палета 1",
              "quantity": 32.0
            }
          ],
          "not_distributed": "5.0",
          "store_complectation": [
            {
              "name": "Вывоз",
              "quantity": 4.0
            }
          ]
        }
}

Связи

Название Связь JSON API type
Инвентаризация store-inventory store-inventories
Продукт product products

Дополнительные поля

Создание поля типа "текст"

curl "https://app.synergycrm.ru/api/v1/custom-fields" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
    {
      "data": {
        "type": "custom-fields",
        "attributes": {
          "name": "Текстовое поле",
          "resource-name": "companies",
          "field-type": "text"
        },
        "relationships": {
          "custom-field-category": {
            "data": {
              "type": "custom-field-categories",
              "id": "2"
            }
          }
        }
      }
    }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/custom-fields");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\": {\"type\": \"custom-fields\",\"attributes\": {\"name\": \"Текстовое поле\",\"resource-name\": \"companies\",\"field-type\": \"text\"},\"relationships\": {\"custom-field-category\": {\"data\": {\"type\": \"custom-field-categories\",\"id\": \"2\"}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/custom-fields')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
      "data": {
        "type": "custom-fields",
        "attributes": {
          "name": "Текстовое поле",
          "resource-name": "companies",
          "field-type": "text"
        },
        "relationships": {
          "custom-field-category": {
            "data": {
              "type": "custom-field-categories",
              "id": "2"
            }
          }
        }
      }
    }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
      "data": {
        "type": "custom-fields",
        "attributes": {
          "name": "Текстовое поле",
          "resource-name": "companies",
          "field-type": "text"
        },
        "relationships": {
          "custom-field-category": {
            "data": {
              "type": "custom-field-categories",
              "id": "2"
            }
          }
        }
      }
    }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/custom-fields", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-fields',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
      "data": {
        "type": "custom-fields",
        "attributes": {
          "name": "Текстовое поле",
          "resource-name": "companies",
          "field-type": "text"
        },
        "relationships": {
          "custom-field-category": {
            "data": {
              "type": "custom-field-categories",
              "id": "2"
            }
          }
        }
      }
    }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/custom-fields"

payload = json.dumps({
      "data": {
        "type": "custom-fields",
        "attributes": {
          "name": "Текстовое поле",
          "resource-name": "companies",
          "field-type": "text"
        },
        "relationships": {
          "custom-field-category": {
            "data": {
              "type": "custom-field-categories",
              "id": "2"
            }
          }
        }
      }
    })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/custom-fields'));
  request.body = json.encode({
      "data": {
        "type": "custom-fields",
        "attributes": {
          "name": "Текстовое поле",
          "resource-name": "companies",
          "field-type": "text"
        },
        "relationships": {
          "custom-field-category": {
            "data": {
              "type": "custom-field-categories",
              "id": "2"
            }
          }
        }
      }
    });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type custom-fields
URL /api/v1/custom-fields
Список GET /api/v1/custom-fields
Чтение GET /api/v1/custom-fields/{id}
Создание POST /api/v1/custom-fields
Редактирование PATCH /api/v1/custom-fields/{id}
Удаление DELETE /api/v1/custom-fields/{id}

Атрибуты

Пример данных

{
  "data": {
    "id": "2",
    "type": "custom-fields",
    "attributes": {
      "name": "Текстовое поле",
      "resource-name": "companies",
      "field-type": "text",
      "params": {
        "acts_like": "phone"
      }
    },
    "relationships": {
      "custom-field-category": {
        "data": {
          "type": "custom-field-categories",
          "id": "2"
        }
      }
    }
  }
}

Основные атрибуты

Имя Тип Пример Создание Изменение Описание
name string Дополнительное текстовое поле Да Да Название поля
resource-name string companies Да Нет Тип ресурса (см. ниже)
field-type string text Да Нет Тип поля (см. ниже)
params object { "acts_like": "phone" } Да Да Доп. параметры (см. ниже)
required boolean true Да Да Обязательность
select-options array ["Апельсины", "Яблоки", "Груши"] Да Да Варианты для типа select
tree-options array [{ "id": "1", "text": "A", "children": [{ "id": "2", "text": "B", "children": [] }] }] Да Да Варианты для типа tree

Значения field-type

Значение Описание Дополнительные параметры
text Текст (адрес, телефон, e-mail, ссылка) Да, см. ниже
number Число (величина, сумма в валюте) Да, см. ниже
date Дата Да, см. ниже
select Список Пока что недоступны при создании через API
external_select Список (внешний источник) Пока что недоступны при создании через API
file Файл Пока что недоступны при создании через API
formula Формула Пока что недоступны при создании через API
rating Рейтинг Пока что недоступны при создании через API
relation Связь Пока что недоступны при создании через API
multiple_relation Множественная связь Пока что недоступны при создании через API
weight Расчетный список Пока что недоступны при создании через API
tree Дерево Пока что недоступны при создании через API
exchange_rate Курс валют Пока что недоступны при создании через API
sequence Нумератор Пока что недоступны при создании через API
timer Таймер Пока что недоступны при создании через API

Значения params для полей типа "Текст"

Имя Тип Пример Описание
acts_like string phone Подвид поля, варианты: address, city, email, phone, region, text, url
multiple boolean true Ввод нескольких значений, только для подвида phone
prefix string https:// Префикс, только для подвида url
beauty_phone boolean true Приводить телефоны к системному виду (+7 xxx xxx-xx-xx), только для подвида phone

Значения params для полей типа "Число"

Имя Тип Пример Описание
only_integer boolean true Только целые значения
extension string кг Единица измерения
extension_type string unit Тип единицы измерения, варианты: unit, currency, without_extension*

*without_extension нужен для сброса единиц измерения при редактировании

Значения params для полей типа "Дата"

Имя Тип Пример Описание
with_time boolean true Разрешать вводить время

Связи

Пример данных

{
  "data": {
    "id": "2",
    "type": "custom-fields",
    "relationships": {
      "custom-field-category": {
        "links": {
          "self": "/api/v1/custom-fields/2/relationships/custom-field-category",
          "related": "/api/v1/custom-fields/2/custom-field-category"
        },
        "data": {
          "type": "custom-field-categories",
          "id": "2"
        }
      }
    }
  }
}

Пример запроса с загруженными источниками и отвественными

curl "https://app.synergycrm.ru/api/v1/custom-fields?include=custom-field-category" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/custom-fields?include=custom-field-category");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/custom-fields')
params = {
  :include => 'custom-field-category',
}
uri.query = URI.encode_www_form(params)

req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/custom-fields?include=custom-field-category", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-fields?include=custom-field-category',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/custom-fields?include=custom-field-category"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/custom-fields?include=custom-field-category'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Категория custom-field-category custom-field-categories

Фильтры

Получить список полей для компаний

curl -G "https://app.synergycrm.ru/api/v1/custom-fields" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[resources]=companies"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/custom-fields?filter[resources]=companies");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/custom-fields?filter[resources]=companies')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/custom-fields?filter[resources]=companies", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-fields?filter[resources]=companies',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/custom-fields?filter[resources]=companies"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/custom-fields?filter[resources]=companies'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Пример ответа поля с типом "текст"

{
    "data": [
        {
            "id": "716",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/716"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "Текст",
                "field-type": "text",
                "required": false,
                "resource-name": "companies",
                "attribute-name": "custom-716",
                "params": {
                    "multiple": "0",
                    "acts_like": "text",
                    "beauty_phone": "0"
                }
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/716/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/716/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "число"

{
    "data": [
        {
            "id": "717",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/717"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "Число",
                "field-type": "number",
                "required": true,
                "resource-name": "companies",
                "attribute-name": "custom-717",
                "params": {
                    "extension": "кг",
                    "only_integer": "1",
                    "extension_type": "unit"
                }
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/717/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/717/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "дата"

{
    "data": [
        {
            "id": "718",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/718"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "Дата",
                "field-type": "date",
                "required": false,
                "resource-name": "companies",
                "attribute-name": "custom-718",
                "params": {
                    "with_time": "1"
                }
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/718/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/718/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "файл"

{
    "data": [
        {
            "id": "719",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/719"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "Файл",
                "field-type": "file",
                "required": false,
                "resource-name": "companies",
                "attribute-name": "custom-719",
                "params": {
                    "public_upload": "1"
                }
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/719/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/719/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "список внешний источник"

{
    "data": [
        {
            "id": "720",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/720"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "список внешний источник",
                "field-type": "external_select",
                "required": false,
                "resource-name": "companies",
                "attribute-name": "custom-720",
                "params": {
                    "multiple": "1",
                    "password": "value",
                    "username": "value",
                    "color_key": "value",
                    "json_path": "value",
                    "label_key": "value",
                    "value_key": "value",
                    "external_source": "https://sire.ru"
                }
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/720/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/720/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "список"

{
    "data": [
        {
            "id": "721",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/721"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "Список",
                "field-type": "select",
                "required": false,
                "resource-name": "companies",
                "attribute-name": "custom-721",
                "params": {
                    "colors": [
                        "#9b3178",
                        "#9f3e2d",
                        "#9e342e"
                    ],
                    "values": [],
                    "options": [
                        "Первый",
                        "Второй",
                        "Третий"
                    ],
                    "multiple": "1",
                    "display_as": "select"
                },
                "select-options": [
                    "Первый",
                    "Второй",
                    "Третий"
                ]
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/721/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/721/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "формула"

{
    "data": [
        {
            "id": "711",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/711"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "Формула",
                "field-type": "formula",
                "required": false,
                "resource-name": "companies",
                "attribute-name": "custom-711",
                "params": {
                    "formula": "<p><span class=\"label label-default fr-deletable\" contenteditable=\"false\" data-method=\"deal.amount\" data-time=\"1681972019977\">Сумма</span>* <span class=\"label label-default fr-deletable\" contenteditable=\"false\" data-method=\"deal.profit\" data-time=\"1681972028924\">Прибыль</span> / <span class=\"label label-default fr-deletable\" contenteditable=\"false\" data-method=\"deal.cost\" data-time=\"1681972038442\">Себестоимость</span> </p>",
                    "dependencies": {
                        "Deal": [
                            "amount",
                            "profit",
                            "cost"
                        ]
                    }
                }
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/711/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/711/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "рейтинг"

{
    "data": [
        {
            "id": "740",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/740"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "рейтинг",
                "field-type": "rating",
                "required": false,
                "resource-name": "companies",
                "attribute-name": "custom-740",
                "params": {} ## значение от 1 до 5
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/740/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/740/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "связь"

{
    "data": [
        {
            "id": "741",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/741"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "связь",
                "field-type": "relation",
                "required": false,
                "resource-name": "companies",
                "attribute-name": "custom-741",
                "params": {
                    "relation_class": "Deal"
                }
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/741/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/741/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "множественная связь"

{
    "data": [
        {
            "id": "713",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/713"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "Множественная связь",
                "field-type": "multiple_relation",
                "required": false,
                "resource-name": "companies",
                "attribute-name": "custom-713",
                "params": {
                    "read_all": "1",
                    "relation_class": "Deal"
                }
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/713/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/713/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "нумератор"

{
    "data": [
        {
            "id": "742",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/742"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "нумератор",
                "field-type": "sequence",
                "required": false,
                "resource-name": "companies",
                "attribute-name": "custom-742",
                "params": {
                    "mask": "2023-1-А",
                    "start_number": 1,
                    "auto_sequence": "1",
                    "sequence_group": "year"
                }
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/742/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/742/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "дерево"

{
    "data": [
        {
            "id": "714",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/714"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "Дерево",
                "field-type": "tree",
                "required": true,
                "resource-name": "companies",
                "attribute-name": "custom-714",
                "params": {
                    "multiple": "1"
                },
                "tree-options": [
                    {
                        "id": 1066,
                        "name": "Пункт 1",
                        "childs": [
                            {
                                "id": 1067,
                                "name": "Пункт 1.1",
                                "childs": [
                                    {
                                        "id": 1068,
                                        "name": "Пункт 1.1.1",
                                        "childs": []
                                    }
                                ]
                            },
                            {
                                "id": 1069,
                                "name": "Пункт 1.2",
                                "childs": [
                                    {
                                        "id": 1070,
                                        "name": "Пункт 1.2.1",
                                        "childs": []
                                    },
                                    {
                                        "id": 1071,
                                        "name": "Пункт 1.2.2",
                                        "childs": []
                                    }
                                ]
                            }
                        ]
                    }
                ]
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/714/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/714/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "курс валюты"

{
    "data": [
        {
            "id": "715",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/715"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "Курс Валюты",
                "field-type": "exchange_rate",
                "required": false,
                "resource-name": "companies",
                "attribute-name": "custom-715",
                "params": {
                    "currency": "14"
                }
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/715/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/715/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}

Пример ответа поля с типом "таймер"

{
    "data": [
        {
            "id": "743",
            "type": "custom-fields",
            "links": {
                "self": "https://app.synergycrm.ru/api/v1/custom-fields/743"
            },
            "attributes": {
                "created-at": "2022-02-22T12:02:22.222+03:00",
                "updated-at": "2022-02-22T12:02:22.222+03:00",
                "cached-at": "2022-02-22T12:02:22.222+03:00",
                "name": "таймер",
                "field-type": "timer",
                "required": false,
                "resource-name": "companies",
                "attribute-name": "custom-743",
                "params": {
                    "time_unit": "hours"
                }
            },
            "relationships": {
                "custom-field-category": {
                    "links": {
                        "self": "https://app.synergycrm.ru/api/v1/custom-fields/743/relationships/custom-field-category",
                        "related": "https://app.synergycrm.ru/api/v1/custom-fields/743/custom-field-category"
                    }
                }
            }
        }
    ],
    "meta": {
        "record-count": 1,
        "page-count": 1
    },
    "links": {
        "first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
        "last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
    }
}
Фильтр Описание Пример
resources Тип ресурса для которого создано поле filter[resources]=companies
field-type Тип поля (все типы см. выше в разделе "Значения field-type") filter[field-type]=text

Почтовые аккаунты

Создание нового аккаунта

curl "https://app.synergycrm.ru/api/v1/mail-accounts" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
     {
        "data": {
          "type": "mail-accounts",
          "attributes": {
            "name": "Название",
            "address": "test@mail.ru",
            "imap-login": "test@mail.ru",
            "imap-password": "Qwe123",
            "imap-host": "example.ru",
            "imap-port": 143,
            "imap-ssl": false,
            "smtp-login": "test@mail.ru",
            "smtp-password": "Qwe123",
            "smtp-host": "example.ru",
            "smtp-port": 25,
            "smtp-ssl": false,
            "smtp-verify-ssl": false,
            "user-ids": [
              1
            ]
          }
        }
      }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/mail-accounts");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\": {\"type\": \"mail-accounts\",\"attributes\": {\"name\": \"Название\",\"address\": \"test@mail.ru\",\"imap-login\": \"test@mail.ru\",\"imap-password\": \"Qwe123\",\"imap-host\": \"example.ru\",\"imap-port\": 143,\"imap-ssl\": false,\"smtp-login\": \"test@mail.ru\",\"smtp-password\": \"Qwe123\",\"smtp-host\": \"example.ru\",\"smtp-port\": 25,\"smtp-ssl\": false,\"smtp-verify-ssl\": false,\"user-ids\": [1]}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/mail-accounts')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
        "data": {
          "type": "mail-accounts",
          "attributes": {
            "name": "Название",
            "address": "test@mail.ru",
            "imap-login": "test@mail.ru",
            "imap-password": "Qwe123",
            "imap-host": "example.ru",
            "imap-port": 143,
            "imap-ssl": false,
            "smtp-login": "test@mail.ru",
            "smtp-password": "Qwe123",
            "smtp-host": "example.ru",
            "smtp-port": 25,
            "smtp-ssl": false,
            "smtp-verify-ssl": false,
            "user-ids": [
              1
            ]
          }
        }
      }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
        "data": {
          "type": "mail-accounts",
          "attributes": {
            "name": "Название",
            "address": "test@mail.ru",
            "imap-login": "test@mail.ru",
            "imap-password": "Qwe123",
            "imap-host": "example.ru",
            "imap-port": 143,
            "imap-ssl": false,
            "smtp-login": "test@mail.ru",
            "smtp-password": "Qwe123",
            "smtp-host": "example.ru",
            "smtp-port": 25,
            "smtp-ssl": false,
            "smtp-verify-ssl": false,
            "user-ids": [
              1
            ]
          }
        }
      }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/mail-accounts", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/mail-accounts',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
        "data": {
          "type": "mail-accounts",
          "attributes": {
            "name": "Название",
            "address": "test@mail.ru",
            "imap-login": "test@mail.ru",
            "imap-password": "Qwe123",
            "imap-host": "example.ru",
            "imap-port": 143,
            "imap-ssl": false,
            "smtp-login": "test@mail.ru",
            "smtp-password": "Qwe123",
            "smtp-host": "example.ru",
            "smtp-port": 25,
            "smtp-ssl": false,
            "smtp-verify-ssl": false,
            "user-ids": [
              1
            ]
          }
        }
      }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/mail-accounts"

payload = json.dumps({
        "data": {
          "type": "mail-accounts",
          "attributes": {
            "name": "Название",
            "address": "test@mail.ru",
            "imap-login": "test@mail.ru",
            "imap-password": "Qwe123",
            "imap-host": "example.ru",
            "imap-port": 143,
            "imap-ssl": false,
            "smtp-login": "test@mail.ru",
            "smtp-password": "Qwe123",
            "smtp-host": "example.ru",
            "smtp-port": 25,
            "smtp-ssl": false,
            "smtp-verify-ssl": false,
            "user-ids": [
              1
            ]
          }
        }
      })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/mail-accounts'));
  request.body = json.encode({
        "data": {
          "type": "mail-accounts",
          "attributes": {
            "name": "Название",
            "address": "test@mail.ru",
            "imap-login": "test@mail.ru",
            "imap-password": "Qwe123",
            "imap-host": "example.ru",
            "imap-port": 143,
            "imap-ssl": false,
            "smtp-login": "test@mail.ru",
            "smtp-password": "Qwe123",
            "smtp-host": "example.ru",
            "smtp-port": 25,
            "smtp-ssl": false,
            "smtp-verify-ssl": false,
            "user-ids": [
              1
            ]
          }
        }
      });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
JSON API type mail-accounts
URL /api/v1/mail-accounts
Список GET /api/v1/mail-accounts
Чтение GET /api/v1/mail-accounts/{id}
Создание POST /api/v1/mail-accounts
Редактирование PATCH /api/v1/mail-accounts/{id}
Удаление DELETE /api/v1/mail-accounts/{id}

Атрибуты

Пример данных

{
  "data": {
    "id": "1",
    "type": "mail-accounts",
    "attributes": {
      "created-at": "2022-02-22T12:02:22.222+03:00",
      "updated-at": "2022-02-22T12:02:22.222+03:00",
      "cached-at": "2022-02-22T12:02:22.222+03:00",
      "name": "ФИО",
      "address": "test@mail.ru",
      "imap-login": "test@mail.ru",
      "imap-host": "imap.example.com",
      "imap-port": "143",
      "imap-ssl": false,
      "imap-status": "completed",
      "smtp-login": "test@mail.ru",
      "smtp-host": "test@mail.ru",
      "smtp-port": "25",
      "smtp-ssl": false,
      "smtp-verify-ssl": false,
      "smtp-status": "completed",
      "signature": "Подпись",
      "signature-before-quote": false,
      "sync-folders-at": "2022-02-22T12:02:22.222+03:00",
      "auto-create-contact": true,
      "auto-contact-after-reply": false,
      "auto-responsible": false,
      "active": true,
      "enable-starttls-auto": true
    }
  }
}

Основные атрибуты

Имя Тип Пример Создание Изменение Просмотр Описание
name string ФИО Да Да Да Имя отправителя
address string test@mail.ru Да Да Да Адрес
imap-login string test@mail.ru Да Да Да Логин для imap-сервера
imap-password string correcthorsebatterystaple Да Да Нет Пароль для imap-сервера
imap-host string imap.example.com Да Да Да Hostname imap-сервера
imap-port integer 143 Да Да Да Порт imap-сервера
imap-ssl boolean true Да Да Да Подключаться к imap-серверу через SSL
imap-status string completed Нет Нет Да Статус imap-подключения
smtp-login string test@mail.ru Да Да Да Логин для smtp-сервера
smtp-password string correcthorsebatterystaple Да Да Нет Пароль для smtp-сервера
smtp-host string smtp.example.com Да Да Да Hostname smtp-сервера
smtp-port integer 25 Да Да Да Порт smtp-сервера
smtp-ssl boolean true Да Да Да Подключаться к smtp-серверу через SSL
smtp-verify-ssl boolean true Да Да Да Проверять сертификат при подключении к smtp-серверу
smtp-status string completed Нет Нет Да Статус smtp-подключения
enable-starttls-auto boolean true Да Да Да Проверяет включен ли STARTTLS на smtp-сервере
signature string Подпись Да Да Да Подпись
signature-before-quote boolean true Да Да Да Подпись перед цитатой
sync-folders-at date 2022-02-22T12:02:22.222+03:00 Нет Нет Да Дата и время последней синхронизации
auto-create-contact boolean true Да Да Да Создавать контакт при получении
auto-contact-after-reply boolean true Да Да Да Создавать контакт после ответа
auto-responsible boolean true Да Да Да Автоматически подставить ответственного
active boolean true Да Да Да Активен / неактивен
user-ids array [1, 2, 3] Да Да Нет* Список пользователей, которые могут управлять аккаунтом

*Список можно получить через связь users

Связи

Пример данных

{
  "data": {
    "id": "2",
    "type": "mail-accounts",
    "relationships": {
      "user": {
        "links": {
          "self": "https://app.synergycrm.ru/api/v1/mail-accounts/2/relationships/user",
          "related": "https://app.synergycrm.ru/api/v1/mail-accounts/2/user"
        }
      },
      "users": {
        "links": {
          "self": "https://app.synergycrm.ru/api/v1/mail-accounts/2/relationships/users",
          "related": "https://app.synergycrm.ru/api/v1/mail-accounts/2/users"
        }
      },
      "messages": {
        "links": {
          "self": "https://app.synergycrm.ru/api/v1/mail-accounts/2/relationships/messages",
          "related": "https://app.synergycrm.ru/api/v1/mail-accounts/2/messages"
        }
      }
    }
  }
}

Пример запроса с загруженными владельцами

curl "https://app.synergycrm.ru/api/v1/mail-accounts?include=user" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/mail-accounts?include=user");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/mail-accounts')
params = {
  :include => 'user',
}
uri.query = URI.encode_www_form(params)

req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/mail-accounts?include=user", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/mail-accounts?include=user',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/mail-accounts?include=user"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/mail-accounts?include=user'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Владелец user users
Пользователи, имеющие доступ к ящику users users
Письма messages mail-messages

Почтовые сообщения

Отправка письма

curl "https://app.synergycrm.ru/api/v1/mail-messages" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
    {
      "data": {
        "type": "mail-messages",
        "attributes": {
          "to": [
            {
              "name": "Имя",
              "address": "test@mail.ru"
            }
          ],
          "subject": "Тема письма",
          "body": "<!DOCTYPE html><html><body>test</body></html>"
        },
        "relationships": {
          "mail-account": {
            "data": {
              "type": "mail-accounts",
              "id": 2
            }
          }
        }
      }
    }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/mail-messages");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\": {\"type\": \"mail-messages\",\"attributes\": {\"to\": [{\"name\": \"Имя\",\"address\": \"test@mail.ru\"}],\"subject\": \"Тема письма\",\"body\": \"<!DOCTYPEhtml><html><body>test</body></html>\"},\"relationships\": {\"mail-account\": {\"data\": {\"type\": \"mail-accounts\",\"id\": 2}}}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/mail-messages')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
      "data": {
        "type": "mail-messages",
        "attributes": {
          "to": [
            {
              "name": "Имя",
              "address": "test@mail.ru"
            }
          ],
          "subject": "Тема письма",
          "body": "<!DOCTYPE html><html><body>test</body></html>"
        },
        "relationships": {
          "mail-account": {
            "data": {
              "type": "mail-accounts",
              "id": 2
            }
          }
        }
      }
    }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
      "data": {
        "type": "mail-messages",
        "attributes": {
          "to": [
            {
              "name": "Имя",
              "address": "test@mail.ru"
            }
          ],
          "subject": "Тема письма",
          "body": "<!DOCTYPE html><html><body>test</body></html>"
        },
        "relationships": {
          "mail-account": {
            "data": {
              "type": "mail-accounts",
              "id": 2
            }
          }
        }
      }
    }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/mail-messages", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/mail-messages',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
      "data": {
        "type": "mail-messages",
        "attributes": {
          "to": [
            {
              "name": "Имя",
              "address": "test@mail.ru"
            }
          ],
          "subject": "Тема письма",
          "body": "<!DOCTYPE html><html><body>test</body></html>"
        },
        "relationships": {
          "mail-account": {
            "data": {
              "type": "mail-accounts",
              "id": 2
            }
          }
        }
      }
    }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/mail-messages"

payload = json.dumps({
      "data": {
        "type": "mail-messages",
        "attributes": {
          "to": [
            {
              "name": "Имя",
              "address": "test@mail.ru"
            }
          ],
          "subject": "Тема письма",
          "body": "<!DOCTYPE html><html><body>test</body></html>"
        },
        "relationships": {
          "mail-account": {
            "data": {
              "type": "mail-accounts",
              "id": 2
            }
          }
        }
      }
    })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/mail-messages'));
  request.body = json.encode({
      "data": {
        "type": "mail-messages",
        "attributes": {
          "to": [
            {
              "name": "Имя",
              "address": "test@mail.ru"
            }
          ],
          "subject": "Тема письма",
          "body": "<!DOCTYPE html><html><body>test</body></html>"
        },
        "relationships": {
          "mail-account": {
            "data": {
              "type": "mail-accounts",
              "id": 2
            }
          }
        }
      }
    });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Пример ответа

{
  "data": {
    "type": "mail-queue-jobs",
    "id": "578c7b51-3d28-4266-9b6d-31f3399c117c",
    "attributes": {
      "status": "pending",
      "action": "create"
    },
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/mail-queue-jobs/578c7b51-3d28-4266-9b6d-31f3399c117c"
    }
  }
}
JSON API type mail-messages
URL /api/v1/mail-messages
Список GET /api/v1/mail-messages
Чтение GET /api/v1/mail-messages/{id}
Создание POST /api/v1/mail-messages
Удаление DELETE /api/v1/mail-messages/{id}

Атрибуты

Пример данных

{
  "created-at": "2022-02-22T12:02:22.222+03:00",
  "updated-at": "2022-02-22T12:02:22.222+03:00",
  "cached-at": "2022-02-22T12:02:22.222+03:00",
  "from": [
    {
      "name": "Имя отправителя",
      "address": "test@mail.ru"
    }
  ],
  "to": [
    {
      "name": "Имя получателя",
      "address": "test@mail.com"
    }
  ],
  "subject": "Тема письма",
  "body": "<!DOCTYPE html><html><body>test</body></html>",
  "uid": "222",
  "message-id": null,
  "full-size": null,
  "direction": "outcoming",
  "envelope": {},
  "flags": [],
  "internaldate": "2022-02-22T12:02:22.222+03:00",
  "reply-to": null,
  "cc": null,
  "bcc": null,
  "previous-responsible-id": null
}

Основные атрибуты

Имя Тип Пример Создание Просмотр Описание
from array/string [ { "name": "Имя", "address": "test@mail.ru" } ] / test@mail.ru Нет Да Данные отправителя
to array/string [ { "name": "Имя", "address": "test@mail.ru" } ] / test@mail.ru Да Да Данные получателя
cc array/string [ { "name": "Имя", "address": "test@mail.ru" } ] / test@mail.ru Да Да Копия
bcc array/string [ { "name": "Имя", "address": "test@mail.ru" } ] / test@mail.ru Да Да Скрытая копия
subject string Message subject Да Да Тема письма
body string Hello! Да Да* Тело письма
uid string 123 Нет Да Идентификатор письма на почтовом сервере
message-id string <1234-4121@domain> Нет Да Уникальный идентификатор письма
direction string outgoing Нет Да Направление отправки (входящее-исходящее)

*Только при запросе письма по id, в списке тело не отображается

Связи

Пример данных

{
  "responsible": {
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/mail-messages/2/relationships/responsible",
      "related": "https://app.synergycrm.ru/api/v1/mail-messages/2/responsible"
    }
  },
  "user": {
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/mail-messages/2/relationships/user",
      "related": "https://app.synergycrm.ru/api/v1/mail-messages/2/user"
    }
  },
  "mail-account": {
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/mail-messages/2/relationships/mail-account",
      "related": "https://app.synergycrm.ru/api/v1/mail-messages/2/mail-account"
    }
  },
  "contacts": {
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/mail-messages/2/relationships/contacts",
      "related": "https://app.synergycrm.ru/api/v1/mail-messages/2/contacts"
    }
  },
  "companies": {
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/mail-messages/2/relationships/companies",
      "related": "https://app.synergycrm.ru/api/v1/mail-messages/2/companies"
    }
  },
  "deals": {
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/mail-messages/2/relationships/deals",
      "related": "https://app.synergycrm.ru/api/v1/mail-messages/2/deals"
    }
  },
  "orders": {
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/mail-messages/2/relationships/orders",
      "related": "https://app.synergycrm.ru/api/v1/mail-messages/2/orders"
    }
  },
  "products": {
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/mail-messages/2/relationships/products",
      "related": "https://app.synergycrm.ru/api/v1/mail-messages/2/products"
    }
  },
  "users": {
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/mail-messages/2/relationships/users",
      "related": "https://app.synergycrm.ru/api/v1/mail-messages/2/users"
    }
  },
  "checkups": {
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/mail-messages/2/relationships/checkups",
      "related": "https://app.synergycrm.ru/api/v1/mail-messages/2/checkups"
    }
  }
}

Пример запроса с загруженными аккаунтами

curl "https://app.synergycrm.ru/api/v1/mail-messages?include=mail-account" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/mail-messages?include=mail-account");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/mail-messages')
params = {
  :include => 'mail-account',
}
uri.query = URI.encode_www_form(params)

req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/mail-messages?include=mail-account", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/mail-messages?include=mail-account',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/mail-messages?include=mail-account"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/mail-messages?include=mail-account'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Каждая связь может быть включена в JSON ответ через параметр include, согласно официальной спецификации JSON API Inclusion of Related Resources.

Название Связь JSON API type
Ответственный responsible users
Создатель user users
Почтовый аккаунт mail-account mail-accounts
Компании companies companies
Контакты contacts contacts
Сделки deals deals
Продукты products products
Заявки orders orders
Сотрудники users users
Осмотры checkups checkups

Фильтры

Получить все письма определенного аккаунта

curl -G "https://app.synergycrm.ru/api/v1/mail-messages" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[mail-account-id]=2"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/mail-messages?filter[mail-account-id]=2");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/mail-messages?filter[mail-account-id]=2')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/mail-messages?filter[mail-account-id]=2", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/mail-messages?filter[mail-account-id]=2',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/mail-messages?filter[mail-account-id]=2"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/mail-messages?filter[mail-account-id]=2'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
responsible-id Ответственный filter[responsible-id]=123
mail-account-id Почтовый аккаунт filter[mail-account-id]=123

Статусы фоновых операций

Запрос статуса операции

curl "https://app.synergycrm.ru/api/v1/mail-queue-jobs/9da99faa-8d36-487b-bbe1-8ac2673e8a03" \
  -H "Authorization: Bearer api_token"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/mail-queue-jobs/9da99faa-8d36-487b-bbe1-8ac2673e8a03");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/mail-queue-jobs/9da99faa-8d36-487b-bbe1-8ac2673e8a03')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/mail-queue-jobs/9da99faa-8d36-487b-bbe1-8ac2673e8a03", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/mail-queue-jobs/9da99faa-8d36-487b-bbe1-8ac2673e8a03',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/mail-queue-jobs/9da99faa-8d36-487b-bbe1-8ac2673e8a03"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/mail-queue-jobs/9da99faa-8d36-487b-bbe1-8ac2673e8a03'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

Пример ответа

{
  "data": {
    "type": "mail-queue-jobs",
    "id": "578c7b51-3d28-4266-9b6d-31f3399c117c",
    "attributes": {
      "status": "pending",
      "action": "create"
    },
    "links": {
      "self": "https://app.synergycrm.ru/api/v1/mail-queue-jobs/578c7b51-3d28-4266-9b6d-31f3399c117c"
    }
  }
}
JSON API type mail-queue-jobs
URL /api/v1/mail-queue-jobs
Чтение GET /api/v1/mail-queue-jobs/{id}

При отправке или удалении писем, в ответ вернется тип mail-queue-jobs. Поле data.links.self будет содержать ссылку, по которой можно узнать статус отправки.

При успешной операции, статус ответа будет 303 See Other, а заголовок Location будет содержать ссылку на конкретное письмо.

Автоматизации

JSON API type scenarios
URL /api/v1/scenarios
Список GET /api/v1/scenarios
Чтение GET /api/v1/scenarios/{id}
Запуск GET /api/v1/scenarios/{id}/run

Атрибуты

Пример данных

{
  "created-at": "2022-02-22T12:22:22.222+03:00",
  "updated-at": "2022-02-22T12:22:22.222+03:00",
  "cached-at": "2022-02-22T12:22:22.222+03:00",
  "name": "Создание сделки",
  "action": "create",
  "class-name": "Deal",
  "active": true,
  "options": {
    "user_id": 1
  },
  "manual-required-fields": null
}

Основные атрибуты

Имя Тип Пример Список Чтение Описание
name string Создание сделки Да Да Название сценария
action string create Да Да Условие запуска сценария
class-name string Deal Да Да Тип сущности
active boolean true Да Да Включен / выключен
options object {} Да Да Дополнительные параметры сценария
manual-required-fields array ["custom_123"] Да Да Обязательные поля для кнопочных сценариев
conditions array [{ "type": "changed", "attribute": "custom_123" }] Нет Да Дополнительные условия
callbacks array [{ "type": "update", "options": { "attribute": "custom_123", "value": "456" }}] Нет Да Действия сценария

Условия запуска сценария

Значение Условие
create при создании
update при изменении
schedule расписание
manual кнопочный
chain из другого сценария

Фильтры

Получить все сценарии по сделкам

curl -G "https://app.synergycrm.ru/api/v1/scenarios" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[class-name]=Deal"

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/scenarios?filter[class-name]=Deal");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("GET");

		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/scenarios?filter[class-name]=Deal')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

func main() {
	client := &http.Client{}
	req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/scenarios?filter[class-name]=Deal", nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/scenarios?filter[class-name]=Deal',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/scenarios?filter[class-name]=Deal"

payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/scenarios?filter[class-name]=Deal'));
  
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 
Фильтр Описание Пример
class-name Тип сущности filter[class-name]=Company
action Условие запуска filter[action]=update
active Активен / неактивен filter[active]=true

Запуск сценариев

Запустить сценарий с id 2 по сделке с id 22

curl "https://app.synergycrm.ru/api/v1/scenarios/2/run" \
  -X POST \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
    {
      "data": {
        "type": "scenarios",
        "id": "2",
        "attributes": {
          "entity-id": "22",
          "entity-type": "deals"
        }
      }
    }
EOF

Пример на Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.synergycrm.ru/api/v1/scenarios/2/run");
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setRequestMethod("POST");

		httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
		httpConn.setRequestProperty("Authorization", "Bearer api_token");

		httpConn.setDoOutput(true);
		OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
		writer.write("{\"data\": {\"type\": \"scenarios\",\"id\": \"2\",\"attributes\": {\"entity-id\": \"22\",\"entity-type\": \"deals\"}}}");
		writer.flush();
		writer.close();
		httpConn.getOutputStream().close();

		InputStream responseStream = httpConn.getResponseCode() / 100 == 2
				? httpConn.getInputStream()
				: httpConn.getErrorStream();
		Scanner s = new Scanner(responseStream).useDelimiter("\\A");
		String response = s.hasNext() ? s.next() : "";
		System.out.println(response);
	}
}

Пример на Ruby

require 'net/http'

uri = URI('https://app.synergycrm.ru/api/v1/scenarios/2/run')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
      "data": {
        "type": "scenarios",
        "id": "2",
        "attributes": {
          "entity-id": "22",
          "entity-type": "deals"
        }
      }
    }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(req)
end

Пример на GO

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"strings"
)

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{
      "data": {
        "type": "scenarios",
        "id": "2",
        "attributes": {
          "entity-id": "22",
          "entity-type": "deals"
        }
      }
    }`)
	req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/scenarios/2/run", data)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/vnd.api+json")
	req.Header.Set("Authorization", "Bearer api_token")
	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()
	bodyText, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", bodyText)
}

Пример на PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/scenarios/2/run',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
      "data": {
        "type": "scenarios",
        "id": "2",
        "attributes": {
          "entity-id": "22",
          "entity-type": "deals"
        }
      }
    }',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.synergycrm.ru/api/v1/scenarios/2/run"

payload = json.dumps({
      "data": {
        "type": "scenarios",
        "id": "2",
        "attributes": {
          "entity-id": "22",
          "entity-type": "deals"
        }
      }
    })

headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Пример на Dart

import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
  var headers = {
    'Content-Type': 'application/vnd.api+json',
    'Authorization': 'Bearer api_key'
  };
  var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/scenarios/2/run'));
  request.body = json.encode({
      "data": {
        "type": "scenarios",
        "id": "2",
        "attributes": {
          "entity-id": "22",
          "entity-type": "deals"
        }
      }
    });
  request.headers.addAll(headers);
  
  http.StreamedResponse response = await request.send();
  
  if (response.statusCode == 200) {
    print(await response.stream.bytesToString());
  }
  else {
    print(response.reasonPhrase);
  }
} 

При успешном запуске сценария вернется статус 202 Accepted без тела ответа.

Коды ошибок

Код Значение
1001 Не выполнены условия запуска сценария
1002 Заполнены не все обязательные поля

В meta у ошибки 1002 можно увидеть список всех обязательных полей для данного сценария.