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