Введение
Спасибо за выбор 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 |
да | Факс |
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 | да | ВКонтакте |
string |
facebook.com/domain | да | ||
string |
ru.linkedin.com/domain | да | Linked-in | |
odnoklassniki | string |
ok.ru/domain | да | Одноклассники |
string |
instagram.com/domain | да | ||
string |
twitter.com/domain | да | ||
string |
wa.me/79876543211 | да | ||
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 |
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 |
да | Факс | |
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 |
filter[email]=mail@test.ru |
|
other-email | Вывести компании по определенному other-email |
filter[other-email]=mail@test.ru |
responsible-id | Вывести компании по определенному ответственному | filter[responsible-id]=2 |
segment-ids | Вывести компании по определенным сегментам | filter[segment-ids]=2 |
segment-process-status-ids | Вывести компании по статусам в сегменте | filter[segment-process-status-ids]=2 |
created-at-gte | Вывести компании созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести компании созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести компании обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести компании обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
table-state-id | Вывести компании по заданному табличному фильтру | filter[table-state-id]=2 |
q | Вывести компании по поисковому запросу | filter[q]=some-query |
archived | Вывести компании в архиве | filter[archived]=2 |
discarded | Вывести компании в корзине | filter[discarded]=2 |
actual | Вывести актуальные компании | filter[actual]=2 |
discarded-at-null | Вывести компании не в корзине | filter[discarded-at-null]=true |
org-details | Вывести компании по связанным реквизитам аккаунта org-detail-id |
filter[org-detail-id]=2 |
Банковские реквизиты
Создание банковских реквизитов для компании
curl "https://app.synergycrm.ru/api/v1/company-bank-details" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"company-bank-details",
"attributes":{
"name":"МОЕ НАЗВАНИЕ БАНКОВСКИХ РЕКВИЗИТОВ"
},
"relationships":{
"company":{
"data":{
"type":"companies",
"id":2
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/company-bank-details");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"company-bank-details\",\"attributes\":{\"name\":\"МОЕ НАЗВАНИЕ БАНКОВСКИХ РЕКВИЗИТОВ\"},\"relationships\":{\"company\":{\"data\":{\"type\":\"companies\",\"id\":2}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/company-bank-details')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"company-bank-details",
"attributes":{
"name":"МОЕ НАЗВАНИЕ БАНКОВСКИХ РЕКВИЗИТОВ"
},
"relationships":{
"company":{
"data":{
"type":"companies",
"id":2
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"company-bank-details",
"attributes":{
"name":"МОЕ НАЗВАНИЕ БАНКОВСКИХ РЕКВИЗИТОВ"
},
"relationships":{
"company":{
"data":{
"type":"companies",
"id":2
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/company-bank-details", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/company-bank-details',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"company-bank-details",
"attributes":{
"name":"МОЕ НАЗВАНИЕ БАНКОВСКИХ РЕКВИЗИТОВ"
},
"relationships":{
"company":{
"data":{
"type":"companies",
"id":2
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/company-bank-details"
payload = json.dumps({
"data":{
"type":"company-bank-details",
"attributes":{
"name":"МОЕ НАЗВАНИЕ БАНКОВСКИХ РЕКВИЗИТОВ"
},
"relationships":{
"company":{
"data":{
"type":"companies",
"id":2
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/company-bank-details'));
request.body = json.encode({
"data":{
"type":"company-bank-details",
"attributes":{
"name":"МОЕ НАЗВАНИЕ БАНКОВСКИХ РЕКВИЗИТОВ"
},
"relationships":{
"company":{
"data":{
"type":"companies",
"id":2
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | company-bank-details |
URL | /api/v1/company-bank-details |
Список | GET /api/v1/company-bank-details |
Чтение | GET /api/v1/company-bank-details/{id} |
Создание | POST /api/v1/company-bank-details |
Редактирование | PATCH /api/v1/company-bank-details/{id} |
Удаление | DELETE /api/v1/company-bank-details/{id} |
Атрибуты
Атрибуты банковских реквизитов компании
{
"data":{
"id": "2",
"type": "company-bank-details",
"attributes":{
"created-at": "2022-02-22T12:22:22.222+03:00",
"updated-at": "2022-02-22T12:22:22.222+03:00",
"name": "МОЕ НАЗВАНИЕ БАНКОВСКИХ РЕКВИЗИТОВ",
"bank-name": "ПАО СБЕРБАНК",
"bik": "000000000",
"corr-number": "00000000000000000000",
"number": "00000000000000000000",
"is-default": true,
"active": true
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
МОЕ НАЗВАНИЕ БАНКОВСКИХ РЕКВИЗИТОВ | да | Название набора реквизитов |
bank-name | string |
ПАО СБЕРБАНК | да | Имя банка |
bik | string |
000000000 | да | БИК банка |
corr-number | string |
00000000000000000000 | да | Корр. счет |
number | string |
00000000000000000000 | да | Номер счета |
is-default | boolean |
true |
да | Основные реквизиты? |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры банковских реквизитов
Получить список банковских реквизитов, созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/company-bank-details" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/company-bank-details?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/company-bank-details?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/company-bank-details?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/company-bank-details?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/company-bank-details?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/company-bank-details?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести банковские реквизиты созданные в системе после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести банковские реквизиты созданные в системе до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести банковские реквизиты обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести банковские реквизиты обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
bik | Вывести банковские реквизиты по БИК банка | filter[bik]=010101010 |
number | Вывести банковские реквизиты по номеру счета | filter[number]=01010101010101010101 |
Связи
Загрузка банковских реквизитов по определенной компании (id = 2)
curl "https://app.synergycrm.ru/api/v1/companies/2/relationships/bank-details" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/companies/2/relationships/bank-details");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/companies/2/relationships/bank-details')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/companies/2/relationships/bank-details", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/companies/2/relationships/bank-details',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/companies/2/relationships/bank-details"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/companies/2/relationships/bank-details'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Название | Связь | JSON API type |
---|---|---|
Компания | company | companies |
Статусы
Создание статуса компании
curl "https://app.synergycrm.ru/api/v1/company-statuses" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"company-statuses",
"attributes":{
"name":"Статус компании из API",
"color":"#000000"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/company-statuses");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"company-statuses\",\"attributes\":{\"name\":\"Статус компании из API\",\"color\":\"#000000\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/company-statuses')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"company-statuses",
"attributes":{
"name":"Статус компании из API",
"color":"#000000"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"company-statuses",
"attributes":{
"name":"Статус компании из API",
"color":"#000000"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/company-statuses", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/company-statuses',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"company-statuses",
"attributes":{
"name":"Статус компании из API",
"color":"#000000"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/company-statuses"
payload = json.dumps({
"data":{
"type":"company-statuses",
"attributes":{
"name":"Статус компании из API",
"color":"#000000"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/company-statuses'));
request.body = json.encode({
"data":{
"type":"company-statuses",
"attributes":{
"name":"Статус компании из API",
"color":"#000000"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | company-statuses |
URL | /api/v1/company-statuses |
Список | GET /api/v1/company-statuses |
Чтение | GET /api/v1/company-statuses/{id} |
Создание | POST /api/v1/company-statuses |
Редактирование | PATCH /api/v1/company-statuses/{id} |
Удаление | DELETE /api/v1/company-statuses/{id} |
Атрибуты
Атрибуты статуса компании
{
"data": {
"type":"company-statuses",
"id":"2",
"attributes":{
"created-at": "2022-02-22T12:22:22.222+03:00",
"updated-at": "2022-02-22T12:22:22.222+03:00",
"name": "Мой статус компании",
"color": "#1f2f3f"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Мой статус компании | да | Имя статуса компании |
color | string |
#1f2f3f | да | Цвет статуса компании |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список статусов компаний созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/company-statuses" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/company-statuses?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/company-statuses?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/company-statuses?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/company-statuses?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/company-statuses?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/company-statuses?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести объекты созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести объекты созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести объекты обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести объекты обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Типы
Создание типа компании
curl "https://app.synergycrm.ru/api/v1/company-types" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"company-types",
"attributes":{
"name":"Тип компании из API"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/company-types");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"company-types\",\"attributes\":{\"name\":\"Тип компании из API\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/company-types')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"company-types",
"attributes":{
"name":"Тип компании из API"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"company-types",
"attributes":{
"name":"Тип компании из API"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/company-types", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/company-types',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"company-types",
"attributes":{
"name":"Тип компании из API"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/company-types"
payload = json.dumps({
"data":{
"type":"company-types",
"attributes":{
"name":"Тип компании из API"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/company-types'));
request.body = json.encode({
"data":{
"type":"company-types",
"attributes":{
"name":"Тип компании из API"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | company-types |
URL | /api/v1/company-types |
Список | GET /api/v1/company-types |
Чтение | GET /api/v1/company-types/{id} |
Создание | POST /api/v1/company-types |
Редактирование | PATCH /api/v1/company-types/{id} |
Удаление | DELETE /api/v1/company-types/{id} |
Атрибуты
Атрибуты типа компании
{
"data": {
"type":"company-types",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Мой тип компании"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Мой тип компании | да | Имя типа компании |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список типов компаний созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/company-types" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/company-types?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/company-types?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/company-types?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/company-types?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/company-types?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/company-types?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести типы компаний созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести типы компаний созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести типы компаний обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести типы компаний обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Сделки
Создание сделки с предустановленным источником
curl "https://app.synergycrm.ru/api/v1/deals" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"deals",
"attributes":{
"name":"Сделка по API",
"planned-at":"2022-02-22"
},
"relationships":{
"source":{
"data":{
"type":"sources",
"id":"2"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/deals");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"deals\",\"attributes\":{\"name\":\"Сделка по API\",\"planned-at\":\"2022-02-22\"},\"relationships\":{\"source\":{\"data\":{\"type\":\"sources\",\"id\":\"2\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/deals')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"deals",
"attributes":{
"name":"Сделка по API",
"planned-at":"2022-02-22"
},
"relationships":{
"source":{
"data":{
"type":"sources",
"id":"2"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"deals",
"attributes":{
"name":"Сделка по API",
"planned-at":"2022-02-22"
},
"relationships":{
"source":{
"data":{
"type":"sources",
"id":"2"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/deals", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deals',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"deals",
"attributes":{
"name":"Сделка по API",
"planned-at":"2022-02-22"
},
"relationships":{
"source":{
"data":{
"type":"sources",
"id":"2"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/deals"
payload = json.dumps({
"data":{
"type":"deals",
"attributes":{
"name":"Сделка по API",
"planned-at":"2022-02-22"
},
"relationships":{
"source":{
"data":{
"type":"sources",
"id":"2"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/deals'));
request.body = json.encode({
"data":{
"type":"deals",
"attributes":{
"name":"Сделка по API",
"planned-at":"2022-02-22"
},
"relationships":{
"source":{
"data":{
"type":"sources",
"id":"2"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Создание сделки с привязанной заявкой
curl "https://app.synergycrm.ru/api/v1/deals" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"deals",
"attributes":{
"name":"Сделка по API с привязанной заявкой"
},
"relationships":{
"orders": {
"data" : [{
"type": "orders",
"id": 22222
}]
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/deals");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"deals\",\"attributes\":{\"name\":\"Сделка по API с привязанной заявкой\"},\"relationships\":{\"orders\": {\"data\" : [{\"type\": \"orders\",\"id\": 22222}]}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/deals')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"deals",
"attributes":{
"name":"Сделка по API с привязанной заявкой"
},
"relationships":{
"orders": {
"data" : [{
"type": "orders",
"id": 22222
}]
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"deals",
"attributes":{
"name":"Сделка по API с привязанной заявкой"
},
"relationships":{
"orders": {
"data" : [{
"type": "orders",
"id": 22222
}]
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/deals", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deals',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"deals",
"attributes":{
"name":"Сделка по API с привязанной заявкой"
},
"relationships":{
"orders": {
"data" : [{
"type": "orders",
"id": 22222
}]
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/deals"
payload = json.dumps({
"data":{
"type":"deals",
"attributes":{
"name":"Сделка по API с привязанной заявкой"
},
"relationships":{
"orders": {
"data" : [{
"type": "orders",
"id": 22222
}]
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/deals?filter[created-at-gte]=2022.02.22 12:00'));
request.body = json.encode({
"data":{
"type":"deals",
"attributes":{
"name":"Сделка по API с привязанной заявкой"
},
"relationships":{
"orders": {
"data" : [{
"type": "orders",
"id": 22222
}]
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Создание сделки с привязанными продуктами
curl "https://app.synergycrm.ru/api/v1/deals" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"deals",
"attributes":{
"name":"Сделка по API с привязанными продуктами"
},
"relationships":{
"products": {
"data" : [{
"type": "products",
"id": 2222
}, {
"type": "products",
"id": 222
}]
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/deals");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"deals\",\"attributes\":{\"name\":\"Сделка по API с привязанными продуктами\"},\"relationships\":{\"products\": {\"data\" : [{\"type\": \"products\",\"id\": 2222}, {\"type\": \"products\",\"id\": 222}]}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/deals')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"deals",
"attributes":{
"name":"Сделка по API с привязанными продуктами"
},
"relationships":{
"products": {
"data" : [{
"type": "products",
"id": 2222
}, {
"type": "products",
"id": 222
}]
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"deals",
"attributes":{
"name":"Сделка по API с привязанными продуктами"
},
"relationships":{
"products": {
"data" : [{
"type": "products",
"id": 2222
}, {
"type": "products",
"id": 222
}]
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/deals", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deals',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"deals",
"attributes":{
"name":"Сделка по API с привязанными продуктами"
},
"relationships":{
"products": {
"data" : [{
"type": "products",
"id": 2222
}, {
"type": "products",
"id": 222
}]
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/deals"
payload = json.dumps({
"data":{
"type":"deals",
"attributes":{
"name":"Сделка по API с привязанными продуктами"
},
"relationships":{
"products": {
"data" : [{
"type": "products",
"id": 2222
}, {
"type": "products",
"id": 222
}]
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/deals?filter[created-at-gte]=2022.02.22 12:00'));
request.body = json.encode({
"data":{
"type":"deals",
"attributes":{
"name":"Сделка по API с привязанными продуктами"
},
"relationships":{
"products": {
"data" : [{
"type": "products",
"id": 2222
}, {
"type": "products",
"id": 222
}]
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | deals |
URL | /api/v1/deals |
Список | GET /api/v1/deals |
Чтение | GET /api/v1/deals/{id} |
Создание | POST /api/v1/deals |
Редактирование | PATCH /api/v1/deals/{id} |
Удаление | DELETE /api/v1/deals/{id} |
Атрибуты
Атрибуты сделки
{
"data": {
"type":"deals",
"id":"2",
"attributes":{
"name":"Моя сделка",
"description":"Мое описание сделки",
"amount":2200000.0,
"number":22,
"planned-at":null,
"finished-at":"2022-02-22",
"customs":{
"custom-1":"Значение",
"custom-943":"2022-02-22T12:02:22.222+03:00"
},
"created-at":"2022-02-22T12:02:22.222+03:00",
"updated-at":"2022-02-22T12:02:22.222+03:00",
"archived-at":null,
"utm-source": null,
"utm-medium": null,
"utm-campaign": null,
"utm-term": null,
"utm-content": null,
"utm-landing-page": null,
"utm-city": null,
"utm-search-query": null
}
}
}
Основные атрибуты
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name | string |
Моя сделка | да | Имя сделки |
description | string |
Описание сделки | да | Подробное описание сделки |
loss-comment | string |
Причина поражения | да | Причина поражения в свободной форме |
amount | decimal |
222.0 | да | Сумма сделки |
cost | decimal |
222.0 | да | Себестомость сделки |
profit | decimal |
222.0 | нет | Прибыль сделки |
number | integer |
22 | да | Номер сделки |
planned-at | date |
2022-02-22 |
да | Планируемая дата закрытия |
finished-at | date |
2022-02-22 |
да | Фактическая дата закрытия |
customs | hash |
{"custom-1":'custom value'} |
да | Свои поля |
created-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:02:22.222+03:00 |
нет | Дата обновления |
archived-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата архивации |
previous-responsible-id | integer |
100 |
нет | Предыдущий ответственный |
UTM метки
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
utm-source | string |
yandex-direct | да | Рекламная система |
utm-medium | string |
cpc | да | Тип трафика |
utm-campaign | string |
cosmetic | да | Название рекламной кампании |
utm-term | string |
shampoo | да | Ключевое слово, которое инициировало показ объявления |
utm-content | string |
some text | да | Информация, которая помогает различать объявления, если совпадают другие параметры |
utm-landing-page | string |
somesite.ru/path | да | Адрес посадочной страницы |
utm-city | string |
Москва | да | Город |
Связи
Пример данных (перечислены не все связи)
{
"data": {
"type":"deals",
"id":"2",
"relationships":{
"responsible":{
"links":{
"self":"/api/v1/deals/2/relationships/responsible",
"related":"/api/v1/deals/2/responsible"
}
},
"stage-category":{
"links":{
"self":"/api/v1/deals/2/relationships/stage-category",
"related":"/api/v1/deals/2/stage-category"
}
}
}
}
}
Пример запроса с загруженными источниками и отвественными
curl "https://app.synergycrm.ru/api/v1/deals?include=source,responsible" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/deals?include=source,responsible");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/deals?include=source,responsible')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/deals?include=source,responsible", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deals?include=source,responsible',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/deals?include=source,responsible"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/deals?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Получить сделки по связанным реквизитам юридического лица аккаунта (org-detail)
curl -G "http://app.synergycrm.ru/api/v1/deals?filter[org-detail-id]=2" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token"
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Ответственный | responsible | users |
Создатель | user | users |
Компания | company | companies |
Контакт | contact | contacts |
Этап | stage | deal-stages |
Воронка | stage-category | deal-stage-categories |
Источник | source | sources |
Статус | status | deal-statuses |
Причина поражения | loss-reason | deal-loss-reasons |
Конкурент поражения | loss-competitor | competitors |
Территория | area | areas |
Продукты | products | products |
Сделки | deals | deals |
Заявки | orders | orders |
Спецификации | entities-products | entity-products |
Задачи | tasks | diary-tasks |
Файлы | documents | documents |
Счета | invoices | invoices |
Договоры | contracts | contracts |
Сегменты | segments | segments |
Ответственная организация | org-detail | org-details |
Фильтры
Получить список сделок созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/deals" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/deals?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/deals?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/deals?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deals?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/deals?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/deals?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
responsible-id | Вывести сделки по определенному ответственному | filter[responsible-id]=2 |
deal-status-id | Вывести сделки по статусу сделки | filter[deal-status-id]=2 |
deal-stage-id | Вывести сделки по этапу сделки | filter[deal-stage-id]=2 |
deal-stage-category-id | Вывести сделки по воронке | filter[deal-stage-category-id]=2 |
related-contacts-ids | Вывести сделки по определенным контактам | filter[related-contacts-ids]=2 |
related-companies-ids | Вывести сделки по определенным компаниям | filter[related-companies-ids]=2 |
segment-ids | Вывести сделки по определенным сегментам | filter[segment-ids]=2 |
segment-process-status-ids | Вывести сделки по статусам в сегменте | filter[segment-process-status-ids]=2 |
created-at-gte | Вывести сделки созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести сделки созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести сделки обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести сделки обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
table-state-id | Вывести сделки по заданному табличному фильтру | filter[table-state-id]=2 |
q | Вывести сделки по поисковому запросу | filter[q]=some-query |
archived | Вывести сделки в архиве | filter[archived]=2 |
discarded | Вывести сделки в корзине | filter[discarded]=2 |
actual | Вывести актуальные сделки | filter[actual]=2 |
discarded-at-null | Вывести сделки не в корзине | filter[discarded-at-null]=true |
org-details | Вывести сделки по связанным реквизитам аккаунта org-detail-id |
filter[org-detail-id]=2 |
Причины поражения
Создание причины поражения сделок
curl "https://app.synergycrm.ru/api/v1/deal-loss-reasons" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"deal-loss-reasons",
"attributes":{
"name":"Причины поражения из API"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/deal-loss-reasons");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"deal-loss-reasons\",\"attributes\":{\"name\":\"Причины поражения из API\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/deal-loss-reasons')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"deal-loss-reasons",
"attributes":{
"name":"Причины поражения из API"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"deal-loss-reasons",
"attributes":{
"name":"Причины поражения из API"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/deal-loss-reasons", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deal-loss-reasons',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"deal-loss-reasons",
"attributes":{
"name":"Причины поражения из API"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/deal-loss-reasons"
payload = json.dumps({
"data":{
"type":"deal-loss-reasons",
"attributes":{
"name":"Причины поражения из API"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/deal-loss-reasons'));
request.body = json.encode({
"data":{
"type":"deal-loss-reasons",
"attributes":{
"name":"Причины поражения из API"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | deal-loss-reasons |
URL | /api/v1/deal-loss-reasons |
Список | GET /api/v1/deal-loss-reasons |
Чтение | GET /api/v1/deal-loss-reasons/{id} |
Создание | POST /api/v1/deal-loss-reasons |
Редактирование | PATCH /api/v1/deal-loss-reasons/{id} |
Удаление | DELETE /api/v1/deal-loss-reasons/{id} |
Атрибуты
Атрибуты причины поражения по сделке
{
"data": {
"type":"deal-loss-reasons",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Моя причина поражения"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Моя причина поражения | да | Название причины поражения сделки |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список причин поражений сделок созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/deal-loss-reasons" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/deal-loss-reasons?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/deal-loss-reasons?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/deal-loss-reasons?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deal-loss-reasons?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/deal-loss-reasons?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/deal-loss-reasons?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести причины поражения, созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести причины поражения, созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести причины поражения, обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести причины поражения, обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Воронки
Создание новой категории этапов сделки
curl "https://app.synergycrm.ru/api/v1/deal-stage-categories" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"deal-stage-categories",
"attributes":{
"name":"Воронка сделок из API"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/deal-stage-categories");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"deal-stage-categories\",\"attributes\":{\"name\":\"Воронка сделок из API\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/deal-stage-categories')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"deal-stage-categories",
"attributes":{
"name":"Воронка сделок из API"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"deal-stage-categories",
"attributes":{
"name":"Воронка сделок из API"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/deal-stage-categories", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deal-stage-categories',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"deal-stage-categories",
"attributes":{
"name":"Воронка сделок из API"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/deal-stage-categories"
payload = json.dumps({
"data":{
"type":"deal-stage-categories",
"attributes":{
"name":"Воронка сделок из API"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/deal-stage-categories'));
request.body = json.encode({
"data":{
"type":"deal-stage-categories",
"attributes":{
"name":"Воронка сделок из API"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | deal-stage-categories |
URL | /api/v1/deal-stage-categories |
Список | GET /api/v1/deal-stage-categories |
Чтение | GET /api/v1/deal-stage-categories/{id} |
Создание | POST /api/v1/deal-stage-categories |
Редактирование | PATCH /api/v1/deal-stage-categories/{id} |
Удаление | DELETE /api/v1/deal-stage-categories/{id} |
Атрибуты
Атрибуты воронки сделок
{
"data": {
"type":"deal-stage-categories",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Воронка сделок",
"calculation-method": "by_billings",
"is-default": true,
"win-by-diaries": false
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Воронка сделок | да | Название воронки |
amount-calc-method* | string |
invoices | да | Способ расчета суммы сделки |
cost-calc-method* | string |
payments | да | Способ расчета себестоимости сделки |
amount-calc-field | string |
custom_1 | да | Поле формулы при расчете суммы сделки по формуле |
cost-calc-field | string |
custom_2 | да | Поле формулы при расчете себестоимости сделки по формуле |
is-default | boolean |
true | да | По-умолчанию |
win-by-diaries | boolean |
false | да | Cчитать сделку выиграной, eсли все задачи выполнены |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Ограничения по значениям
Аттрибут | Варианты |
---|---|
amount-calc-method | manually , invoices , products , payments , formula |
cost-calc-method | manually , products , payments , formula |
Фильтры
Получить список категорий этапов сделок созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/deal-stage-categories" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/deal-stage-categories?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/deal-stage-categories?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/deal-stage-categories?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deal-stage-categories?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/deal-stage-categories?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/deal-stage-categories?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести воронки сделок, созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести воронки сделок, созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести воронки сделок, обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести воронки сделок, обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Этапы
Создание нового этапа сделки
curl "https://app.synergycrm.ru/api/v1/deal-stages" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"deal-stages",
"attributes":{
"name":"Этап сделки в API"
},
"relationships":{
"deal-stage-category": {
"data": {
"type": "deal-stage-categories",
"id": 2
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/deal-stages");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"deal-stages\",\"attributes\":{\"name\":\"Этап сделки в API\"},\"relationships\":{ \"deal-stage-category\":{\"data\": { \"type\": \"deal-stage-categories\",\"id\": 2}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/deal-stages')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"deal-stages",
"attributes":{
"name":"Этап сделки в API"
},
"relationships":{
"deal-stage-category": {
"data": {
"type": "deal-stage-categories",
"id": 2
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"deal-stages",
"attributes":{
"name":"Этап сделки в API"
},
"relationships":{
"deal-stage-category": {
"data": {
"type": "deal-stage-categories",
"id": 2
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/deal-stages", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deal-stages',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"deal-stages",
"attributes":{
"name":"Этап сделки в API"
},
"relationships":{
"deal-stage-category": {
"data": {
"type": "deal-stage-categories",
"id": 2
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/deal-stages"
payload = json.dumps({
"data":{
"type":"deal-stages",
"attributes":{
"name":"Этап сделки в API"
},
"relationships":{
"deal-stage-category": {
"data": {
"type": "deal-stage-categories",
"id": 2
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/deal-stages'));
request.body = json.encode({
"data":{
"type":"deal-stages",
"attributes":{
"name":"Этап сделки в API"
},
"relationships":{
"deal-stage-category": {
"data": {
"type": "deal-stage-categories",
"id": 2
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | deal-stages |
URL | /api/v1/deal-stages |
Список | GET /api/v1/deal-stages |
Чтение | GET /api/v1/deal-stages/{id} |
Создание | POST /api/v1/deal-stages |
Редактирование | PATCH /api/v1/deal-stages/{id} |
Удаление | DELETE /api/v1/deal-stages/{id} |
Атрибуты
Атрибуты этапа сделки
{
"data": {
"type":"deal-stages",
"id":"2",
"attributes":{
"created-at": "2022-02-22T12:22:22.222+03:00",
"updated-at": "2022-02-22T12:22:22.222+03:00",
"name": "Мой этап сделки",
"description": null,
"duration": null,
"kind": null,
"color": "#e0e0e0",
"next-if-items-done": false
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Мой этап сделки | да | Название воронки |
duration | integer |
20000 | да | Длительность этапа |
next-if-items-done | boolean |
false | да | Переходить на следующий этап, если все задачи выполнены |
description | boolean |
true | да | Описание |
color | string |
#ee66aa | да | Цвет этапа |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список этапов сделок созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/deal-stages" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести этапы сделок, созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести этапы сделок, созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести этапы сделок, обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести этапы сделок, обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Статусы
Создание статуса сделки
curl "https://app.synergycrm.ru/api/v1/deal-statuses" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"deal-statuses",
"attributes":{
"name":"Статус сделки в API",
"color":"#000000"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/deal-statuses");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"deal-statuses\",\"attributes\":{\"name\":\"Статус сделки в API\",\"color\":\"#000000\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/deal-statuses')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"deal-statuses",
"attributes":{
"name":"Статус сделки в API",
"color":"#000000"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"deal-statuses",
"attributes":{
"name":"Статус сделки в API",
"color":"#000000"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/deal-statuses", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deal-statuses',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"deal-statuses",
"attributes":{
"name":"Статус сделки в API",
"color":"#000000"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/deal-statuses"
payload = json.dumps({
"data":{
"type":"deal-statuses",
"attributes":{
"name":"Статус сделки в API",
"color":"#000000"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/deal-statuses'));
request.body = json.encode({
"data":{
"type":"deal-statuses",
"attributes":{
"name":"Статус сделки в API",
"color":"#000000"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | deal-statuses |
URL | /api/v1/deal-statuses |
Список | GET /api/v1/deal-statuses |
Чтение | GET /api/v1/deal-statuses/{id} |
Создание | POST /api/v1/deal-statuses |
Редактирование | PATCH /api/v1/deal-statuses/{id} |
Удаление | DELETE /api/v1/deal-statuses/{id} |
Атрибуты
Атрибуты статуса сделки
{
"data": {
"type":"deal-statuses",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Мой статус сделки",
"color": "#1f2f3f"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Мой статус сделки | да | Имя статуса сделки |
color | string |
#1f2f3f | да | Цвет статуса сделки |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список статусов сделок созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/deal-statuses" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/deal-statuses?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/deal-statuses?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/deal-statuses?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deal-statuses?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/deal-statuses?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/deal-statuses?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести статусы сделок, созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести статусы сделок, созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести статусы сделок, обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести статусы сделок, обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Заявки
Создание заявки с предустановленным источником
curl "https://app.synergycrm.ru/api/v1/orders" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"orders",
"attributes":{
"name":"Заявка по API",
"archived-at":"2022-02-22"
},
"relationships":{
"source":{
"data":{
"type":"sources",
"id":"2"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/orders");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"orders\",\"attributes\":{\"name\":\"Заявка по API\",\"archived-at\":\"2022-02-22\"},\"relationships\":{\"source\":{\"data\":{\"type\":\"sources\",\"id\":\"2\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/orders')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"orders",
"attributes":{
"name":"Заявка по API",
"archived-at":"2022-02-22"
},
"relationships":{
"source":{
"data":{
"type":"sources",
"id":"2"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"orders",
"attributes":{
"name":"Заявка по API",
"archived-at":"2022-02-22"
},
"relationships":{
"source":{
"data":{
"type":"sources",
"id":"2"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/orders", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/orders',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"orders",
"attributes":{
"name":"Заявка по API",
"archived-at":"2022-02-22"
},
"relationships":{
"source":{
"data":{
"type":"sources",
"id":"2"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/orders"
payload = json.dumps({
"data":{
"type":"orders",
"attributes":{
"name":"Заявка по API",
"archived-at":"2022-02-22"
},
"relationships":{
"source":{
"data":{
"type":"sources",
"id":"2"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/orders'));
request.body = json.encode({
"data":{
"type":"orders",
"attributes":{
"name":"Заявка по API",
"archived-at":"2022-02-22"
},
"relationships":{
"source":{
"data":{
"type":"sources",
"id":"2"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Создание заявки с предустановленной сделкой
curl "https://app.synergycrm.ru/api/v1/orders" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"orders",
"attributes":{
"name":"Заявка по API с предустановленной сделкой",
"archived-at":"2022-02-22"
},
"relationships":{
"deals": {
"data" : [{
"type": "deals",
"id": 22222
}]
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/orders");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"orders\",\"attributes\":{\"name\":\"Заявка по API с предустановленной сделкой\",\"archived-at\":\"2022-02-22\"},\"relationships\":{\"deals\": {\"data\" : [{\"type\": \"deals\",\"id\": 22222}]}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/orders')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"orders",
"attributes":{
"name":"Заявка по API с предустановленной сделкой",
"archived-at":"2022-02-22"
},
"relationships":{
"deals": {
"data" : [{
"type": "deals",
"id":22222
}]
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"orders",
"attributes":{
"name":"Заявка по API с предустановленной сделкой",
"archived-at":"2022-02-22"
},
"relationships":{
"deals": {
"data" : [{
"type": "deals",
"id":22222
}]
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/orders", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/orders',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"orders",
"attributes":{
"name":"Заявка по API с предустановленной сделкой",
"archived-at":"2022-02-22"
},
"relationships":{
"deals": {
"data" : [{
"type": "deals",
"id":22222
}]
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/orders"
payload = json.dumps({
"data":{
"type":"orders",
"attributes":{
"name":"Заявка по API с предустановленной сделкой",
"archived-at":"2022-02-22"
},
"relationships":{
"deals": {
"data" : [{
"type": "deals",
"id":22222
}]
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/orders'));
request.body = json.encode({
"data":{
"type":"orders",
"attributes":{
"name":"Заявка по API с предустановленной сделкой",
"archived-at":"2022-02-22"
},
"relationships":{
"deals": {
"data" : [{
"type": "deals",
"id":22222
}]
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | orders |
URL | /api/v1/orders |
Список | GET /api/v1/orders |
Чтение | GET /api/v1/orders/{id} |
Создание | POST /api/v1/orders |
Редактирование | PATCH /api/v1/orders/{id} |
Удаление | DELETE /api/v1/orders/{id} |
Атрибуты
Атрибуты заявки
{
"data": {
"type":"orders",
"id":"2",
"attributes":{
"name":"Моя заявка",
"description":"Мое описание заявки",
"amount":"2222.0",
"number":22,
"archived-at":"2022-02-22",
"customs":{
"custom-11":"Значение",
"custom-43":"2022-02-22T12:02:22.222+03:00"
},
"created-at":"2022-02-22T12:02:22.222+03:00",
"updated-at":"2022-02-22T12:02:22.222+03:00"
"utm-source": null,
"utm-medium": null,
"utm-campaign": null,
"utm-term": null,
"utm-content": null,
"utm-landing-page": null,
"utm-city": null,
"utm-search-query": null
}
}
}
Основные атрибуты
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name | string |
Моя сделка | да | Имя заявки |
description | string |
Описание сделки | да | Подробное описание заявки |
loss-comment | string |
Причина поражения | да | Причина поражения в свободной форме |
amount | decimal |
123.0 | да | Сумма заявки |
number | integer |
2 | да | Номер заявки |
customs | hash |
{"custom-1":'custom value'} |
да | Свои поля |
created-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:02:22.222+03:00 |
нет | Дата обновления |
archived-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата архивации |
discarded-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата перемещения в корзину |
previous-responsible-id | integer |
100 |
нет | Предыдущий ответственный |
UTM метки
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
utm-source | string |
yandex-direct | да | Рекламная система |
utm-medium | string |
cpc | да | Тип трафика |
utm-campaign | string |
cosmetic | да | Название рекламной кампании |
utm-term | string |
shampoo | да | Ключевое слово, которое инициировало показ объявления |
utm-content | string |
some text | да | Информация, которая помогает различать объявления, если совпадают другие параметры |
utm-landing-page | string |
somesite.ru/path | да | Адрес посадочной страницы |
utm-city | string |
Москва | да | Город |
Связи
Пример данных (перечислены не все связи)
{
"data": {
"type":"orders",
"id":"2",
"relationships":{
"responsible":{
"links":{
"self":"/api/v1/orders/2/relationships/responsible",
"related":"/api/v1/orders/2/responsible"
}
},
"stage":{
"links":{
"self":"/api/v1/orders/2/relationships/stage",
"related":"/api/v1/orders/2/stage"
}
}
}
}
}
Пример запроса с загруженными источниками и отвественными
curl "https://app.synergycrm.ru/api/v1/orders?include=source,responsible" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/orders?include=source,responsible");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/orders?include=source,responsible')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/orders?include=source,responsible", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/orders?include=source,responsible',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/orders?include=source,responsible"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/orders?include=source,responsible'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Ответственный | responsible | users |
Создатель | user | users |
Компания | company | companies |
Контакт | contact | contacts |
Этап | stage | order-stages |
Источник | source | sources |
Статус | status | order-statuses |
Причина поражения | loss-reason | order-loss-reasons |
Конкурент поражения | loss-competitor | competitors |
Территория | area | areas |
Продукты | products | products |
Сделки | deals | deals |
Спецификации | entities-products | |
Соисполнители | performers | users |
Задачи | tasks | diary-tasks |
Файлы | documents | documents |
Счета | invoices | invoices |
Договоры | contracts | contracts |
Фильтры
Получить список заявок до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/orders" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/orders?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/orders?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/orders?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/orders?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/orders?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/orders?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
order-stage-id | Вывести заявки по этапу заявки | filter[order-stage-id]=2 |
responsible-id | Вывести заявки по определенному ответственному | filter[responsible-id]=2 |
created-at-gte | Вывести заявки созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести заявки созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести заявки обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести заявки обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
table-state-id | Вывести заявки по заданному табличному фильтру | filter[table-state-id]=2 |
q | Вывести заявки по поисковому запросу | filter[q]=some-query |
archived | Вывести заявки в архиве | filter[archived]=2 |
discarded | Вывести заявки в корзине | filter[discarded]=2 |
actual | Вывести актуальные заявки | filter[actual]=2 |
discarded-at-null | Вывести заявки не в корзине | filter[discarded-at-null]=true |
Причины поражения
Создание причины поражения заявки
curl "https://app.synergycrm.ru/api/v1/order-loss-reasons" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"order-loss-reasons",
"attributes":{
"name":"Моя причина поражения"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/order-loss-reasons");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"order-loss-reasons\",\"attributes\":{\"name\":\"Моя причина поражения\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/order-loss-reasons')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"order-loss-reasons",
"attributes":{
"name":"Моя причина поражения"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"order-loss-reasons",
"attributes":{
"name":"Моя причина поражения"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/order-loss-reasons", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/order-loss-reasons',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"order-loss-reasons",
"attributes":{
"name":"Моя причина поражения"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/order-loss-reasons"
payload = json.dumps({
"data":{
"type":"order-loss-reasons",
"attributes":{
"name":"Моя причина поражения"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/order-loss-reasons'));
request.body = json.encode({
"data":{
"type":"order-loss-reasons",
"attributes":{
"name":"Моя причина поражения"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | order-loss-reasons |
URL | /api/v1/order-loss-reasons |
Список | GET /api/v1/order-loss-reasons |
Чтение | GET /api/v1/order-loss-reasons/{id} |
Создание | POST /api/v1/order-loss-reasons |
Редактирование | PATCH /api/v1/order-loss-reasons/{id} |
Удаление | DELETE /api/v1/order-loss-reasons/{id} |
Атрибуты
Атрибуты причины поражения по заявке
{
"data": {
"type":"order-loss-reasons",
"id":"1",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Моя причина поражения"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Моя причина поражения | да | Название причины поражения заявки |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список причин поражений заявок созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/order-loss-reasons" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/order-loss-reasons?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/order-loss-reasons?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/order-loss-reasons?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/order-loss-reasons?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/order-loss-reasons?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/order-loss-reasons?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести причины поражения созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести причины поражения созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести причины поражения обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести причины поражения обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Этапы
Создание нового этапа заявки
curl "https://app.synergycrm.ru/api/v1/order-stages" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"deal-stages",
"attributes":{
"name":"Этап в API"
},
"relation"
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/order-stages");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"deal-stages\",\"attributes\":{\"name\":\"Этап в API\"},\"relation\"}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/order-stages')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"deal-stages",
"attributes":{
"name":"Этап в API"
},
"relation"
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"deal-stages",
"attributes":{
"name":"Этап в API"
},
"relation"
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/order-stages", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/order-stages',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"deal-stages",
"attributes":{
"name":"Этап в API"
},
"relation"
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/order-stages"
payload = json.dumps({
"data":{
"type":"deal-stages",
"attributes":{
"name":"Этап в API"
},
"relation"
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/order-stages'));
request.body = json.encode({
"data":{
"type":"deal-stages",
"attributes":{
"name":"Этап в API"
},
"relation"
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | order-stages |
URL | /api/v1/order-stages |
Список | GET /api/v1/order-stages |
Чтение | GET /api/v1/order-stages/{id} |
Создание | POST /api/v1/order-stages |
Редактирование | PATCH /api/v1/order-stages/{id} |
Удаление | DELETE /api/v1/order-stages/{id} |
Атрибуты
Атрибуты этапа заявки
{
"data": {
"type":"order-stages",
"id":"1",
"attributes":{
"created-at": "2022-02-22T12:22:22.222+03:00",
"updated-at": "2022-02-22T12:22:22.222+03:00",
"name": "Мой этап заявки",
"description": true,
"color": "#ee66aa",
"duration": 20000,
"next-if-items-done": false
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Мое название воронки | да | Название воронки |
duration | integer |
20000 | да | Длительность этапа |
next-if-items-done | boolean |
false | да | Переходить на следующий этап, если все задачи выполнены |
description | boolean |
true | да | Описание |
color | string |
#ee66aa | да | Цвет этапа |
kind | string |
opened, won, lost, null | нет | Вид этапа |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список этапов заявок созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/deal-stages" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести этапы заявок, созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести этапы заявок, созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести этапы заявок, обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести этапы заявок, обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Статусы
Создание статуса заявки
curl "https://app.synergycrm.ru/api/v1/order-statuses" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"order-statuses",
"attributes":{
"name":"Статус заявки в API",
"color":"#000000"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/order-statuses");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"order-statuses\",\"attributes\":{\"name\":\"Статус заявки в API\",\"color\":\"#000000\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/order-statuses')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"order-statuses",
"attributes":{
"name":"Статус заявки в API",
"color":"#000000"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"order-statuses",
"attributes":{
"name":"Статус заявки в API",
"color":"#000000"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/order-statuses", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/order-statuses',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"order-statuses",
"attributes":{
"name":"Статус заявки в API",
"color":"#000000"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/order-statuses"
payload = json.dumps({
"data":{
"type":"order-statuses",
"attributes":{
"name":"Статус заявки в API",
"color":"#000000"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/order-statuses'));
request.body = json.encode({
"data":{
"type":"order-statuses",
"attributes":{
"name":"Статус заявки в API",
"color":"#000000"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | order-statuses |
URL | /api/v1/order-statuses |
Список | GET /api/v1/order-statuses |
Чтение | GET /api/v1/order-statuses/{id} |
Создание | POST /api/v1/order-statuses |
Редактирование | PATCH /api/v1/order-statuses/{id} |
Удаление | DELETE /api/v1/order-statuses/{id} |
Атрибуты
Атрибуты статуса заявки
{
"data": {
"type":"order-statuses",
"id":"1",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Мой статус заявки",
"color": "#1f2f3f"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Мой статус заявки | да | Имя статуса заявки |
color | string |
#1f2f3f | да | Цвет статуса заявки |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список статусов заявок созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/order-statuses" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/order-statuses?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/order-statuses?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/order-statuses?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/order-statuses?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/order-statuses?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/order-statuses?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести статусы заявок, созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести статусы заявок, созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести статусы заявок, обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести статусы заявок, обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
События
Создание события с предустановленным исполнителем и компанией
curl "https://app.synergycrm.ru/api/v1/diary-events" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"diary-events",
"attributes":{
"name":"Задача по API",
"description":"Данная задача было создана при помощи API",
"start-time":"2022-02-22 12:00 +0300"
},
"relationships":{
"responsible": {
"data":{
"type":"users",
"id":"2"
}
},
"company":{
"data":{
"type":"companies",
"id":"22"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/diary-events");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"diary-events\",\"attributes\":{\"name\":\"Задача по API\",\"description\":\"Данная задача было создана при помощи API\",\"start-time\":\"2022-02-22 12:00 +0300\"},\"relationships\":{\"responsible\": {\"data\":{\"type\":\"users\",\"id\":\"2\"}},\"company\":{\"data\":{\"type\":\"companies\",\"id\":\"22\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/diary-events')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"diary-events",
"attributes":{
"name":"Задача по API",
"description":"Данная задача было создана при помощи API",
"start-time":"2022-02-22 12:00 +0300"
},
"relationships":{
"responsible": {
"data":{
"type":"users",
"id":"2"
}
},
"company":{
"data":{
"type":"companies",
"id":"22"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"diary-events",
"attributes":{
"name":"Задача по API",
"description":"Данная задача было создана при помощи API",
"start-time":"2022-02-22 12:00 +0300"
},
"relationships":{
"responsible": {
"data":{
"type":"users",
"id":"2"
}
},
"company":{
"data":{
"type":"companies",
"id":"22"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/diary-events", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-events',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"diary-events",
"attributes":{
"name":"Задача по API",
"description":"Данная задача было создана при помощи API",
"start-time":"2022-02-22 12:00 +0300"
},
"relationships":{
"responsible": {
"data":{
"type":"users",
"id":"2"
}
},
"company":{
"data":{
"type":"companies",
"id":"22"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/diary-events"
payload = json.dumps({
"data":{
"type":"diary-events",
"attributes":{
"name":"Задача по API",
"description":"Данная задача было создана при помощи API",
"start-time":"2022-02-22 12:00 +0300"
},
"relationships":{
"responsible": {
"data":{
"type":"users",
"id":"2"
}
},
"company":{
"data":{
"type":"companies",
"id":"22"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/diary-events'));
request.body = json.encode({
"data":{
"type":"diary-events",
"attributes":{
"name":"Задача по API",
"description":"Данная задача было создана при помощи API",
"start-time":"2022-02-22 12:00 +0300"
},
"relationships":{
"responsible": {
"data":{
"type":"users",
"id":"2"
}
},
"company":{
"data":{
"type":"companies",
"id":"22"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | diary-events |
URL | /api/v1/diary-events |
Список | GET /api/v1/diary-events |
Чтение | GET /api/v1/diary-events/{id} |
Создание | POST /api/v1/diary-events |
Редактирование | PATCH /api/v1/diary-events/{id} |
Удаление | DELETE /api/v1/diary-events/{id} |
Атрибуты
Атрибуты события
{
"data": {
"type":"diary-events",
"id":"2",
"attributes":{
"name":"Отправить копию договора",
"address": "Ленинский 15",
"description":"Отправить копию договора в ООО \"Компания\"",
"start-time":"2022-02-22T12:02:22.222+03:00",
"end-time":"2022-02-22T12:22:22.222+03:00",
"color":"#fff",
"status":"completed",
"due-date":"2022-02-22T22:02:22.222+03:00",
"duration":null,
"customs":{
"custom-1":"Важный клиент",
"custom-943":"2022-02-22T12:02:22.222+03:00"
},
"created-at":"2022-02-22T12:02:22.222+03:00",
"completed-at":"2022-02-22T22:02:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"archived-at":null
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Переговоры с ООО "Компания" | да | Название события |
address | string |
Ленинский 15 | да | Адрес |
description | string |
Переговоры для дальнейшей координации сотрудничества | да | Подробное описание события |
start-time | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Время начала |
end-time | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Время окончания |
due-date | datetime |
2022-02-22T22:02:22.222+03:00 |
да | Дедлайн |
color | string |
#fff | да | Цвет |
status | string |
completed, overdue, opened | нет | Статус |
custom | hash |
{"custom-1":'custom value'} |
да | Свои поля |
created-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата создания |
completed-at | datetime |
2022-02-22T22:02:22.222+03:00 |
да | Дата завершения |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
archived-at | datetime |
2022-02-22T22:02:22.222+03:00 |
да | Дата архивации |
discarded-at | datetime |
2022-02-22T22:02:22.222+03:00 |
да | Дата перемещения в корзину |
completed-result | string |
2022-02-22T22:02:22.222+03:00 |
да | Результат завершения |
previous-responsible-id | integer |
100 |
нет | Предыдущий ответственный |
* Обязательные поля
Связи
Пример данных (перечислены не все связи)
{
"data": {
"type":"diary-events",
"id":"2",
"relationships":{
"responsible":{
"links":{
"self":"/api/v1/diary-events/2/relationships/responsible",
"related":"/api/v1/diary-events/2/responsible"
}
},
"diary-type":{
"links":{
"self":"/api/v1/diary-events/2/relationships/diary-type",
"related":"/api/v1/diary-events/2/diary-type"
}
}
}
}
}
Пример запроса с загруженными типами задачи и отвественными
curl "https://app.synergycrm.ru/api/v1/diary-events?include=diary-type,responsible" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/diary-events?include=diary-type,responsible");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/diary-events?include=diary-type,responsible')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/diary-events?include=diary-type,responsible", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-events?include=diary-type,responsible',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/diary-events?include=diary-type,responsible"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/diary-events?include=diary-type,responsible'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Ответственный | responsible | users |
Создатель | user | users |
Компания | company | companies |
Контакт | contact | contacts |
Сделка | deal | deals |
Заявка | order | orders |
Тип задачи | diary-type | diary-types |
Соисполнители | performers | users |
Постановщик | initiator | users |
Метки | labels | labels |
Подзадачи | diaries | diaries |
Файлы | documents | documents |
Фильтры
Получить список событий созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/diary-events" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/diary-events?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/diary-events?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/diary-events?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-events?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/diary-events?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/diary-events?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести события созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести события созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
completed-at-gte | Вывести события завершенные после указанного времени | filter[completed-at-gte]=2022.02.22 12:00 |
completed-at-lte | Вывести события завершенные до указанного времени | filter[completed-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести события обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести события обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
started-gte | Вывести события имеющие даты начала позднее указанного времени | filter[started-gte]=2022.02.22 12:00 |
started-lte | Вывести события имеющие даты начала раннего до указанного времени | filter[started-lte]=2022.02.22 12:00 |
expired-gte | Вывести события истекающие после указанного времени | filter[expired-gte]=2022.02.22 12:00 |
expired-lte | Вывести события истекающие до указанного времени | filter[expired-lte]=2022.02.22 12:00 |
table-state-id | Вывести события по заданному табличному фильтру | filter[table-state-id]=2 |
q | Вывести события по поисковому запросу | filter[q]=some-query |
archived | Вывести события в архиве | filter[archived]=2 |
discarded | Вывести события в корзине | filter[discarded]=2 |
actual | Вывести актуальные события | filter[actual]=2 |
diary-type-id | Вывести события по типу задачи | filter[diary-type-id]=2 |
discarded-at-null | Вывести события не в корзине | filter[discarded-at-null]=true |
expired-null | Вывести события без даты окончания | filter[expired-null]=true |
completed-at-null | Вывести незавершенные события | filter[completed-at-null]=true |
Задачи
Создание задачи с предустановленным исполнителем и контактом
curl "https://app.synergycrm.ru/api/v1/diary-tasks" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"diary-tasks",
"attributes":{
"name":"Задача по API",
"description":"Данная задача было создана при помощи API",
"due-date":"2022-12-22 12:00 +0300",
"start-time":"2022-02-22 12:00 +0300"
},
"relationships":{
"responsible": {
"data":{
"type":"users",
"id":"2"
}
},
"contact":{
"data":{
"type":"contacts",
"id":"22"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/diary-tasks");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"diary-tasks\",\"attributes\":{\"name\":\"Задача по API\",\"description\":\"Данная задача было создана при помощи API\",\"due-date\":\"2022-12-22 12:00 +0300\",\"start-time\":\"2022-02-22 12:00 +0300\"},\"relationships\":{\"responsible\": {\"data\":{\"type\":\"users\",\"id\":\"2\"}},\"contact\":{\"data\":{\"type\":\"contacts\",\"id\":\"22\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/diary-tasks')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"diary-tasks",
"attributes":{
"name":"Задача по API",
"description":"Данная задача было создана при помощи API",
"due-date":"2022-12-22 12:00 +0300", "start-time":"2022-02-22 12:00 +0300"
},
"relationships":{
"responsible": {
"data":{
"type":"users",
"id":"2"
}
},
"contact":{
"data":{
"type":"contacts",
"id":"22"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"diary-tasks",
"attributes":{
"name":"Задача по API",
"description":"Данная задача было создана при помощи API",
"due-date":"2022-12-22 12:00 +0300", "start-time":"2022-02-22 12:00 +0300"
},
"relationships":{
"responsible": {
"data":{
"type":"users",
"id":"2"
}
},
"contact":{
"data":{
"type":"contacts",
"id":"22"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/diary-tasks", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-tasks',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"diary-tasks",
"attributes":{
"name":"Задача по API",
"description":"Данная задача было создана при помощи API",
"due-date":"2022-12-22 12:00 +0300", "start-time":"2022-02-22 12:00 +0300"
},
"relationships":{
"responsible": {
"data":{
"type":"users",
"id":"2"
}
},
"contact":{
"data":{
"type":"contacts",
"id":"22"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/diary-tasks"
payload = json.dumps({
"data":{
"type":"diary-tasks",
"attributes":{
"name":"Задача по API",
"description":"Данная задача было создана при помощи API",
"due-date":"2022-12-22 12:00 +0300", "start-time":"2022-02-22 12:00 +0300"
},
"relationships":{
"responsible": {
"data":{
"type":"users",
"id":"2"
}
},
"contact":{
"data":{
"type":"contacts",
"id":"22"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/diary-tasks'));
request.body = json.encode({
"data":{
"type":"diary-tasks",
"attributes":{
"name":"Задача по API",
"description":"Данная задача было создана при помощи API",
"due-date":"2022-12-22 12:00 +0300", "start-time":"2022-02-22 12:00 +0300"
},
"relationships":{
"responsible": {
"data":{
"type":"users",
"id":"2"
}
},
"contact":{
"data":{
"type":"contacts",
"id":"22"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | diary-tasks |
URL | /api/v1/diary-tasks |
Список | GET /api/v1/diary-tasks |
Чтение | GET /api/v1/diary-tasks/{id} |
Создание | POST /api/v1/diary-tasks |
Редактирование | PATCH /api/v1/diary-tasks/{id} |
Удаление | DELETE /api/v1/diary-tasks/{id} |
Атрибуты
Атрибуты задачи
{
"data": {
"type":"diary-tasks",
"id":"2",
"attributes":{
"name":"Отправить копию договора",
"address": "Ленинский 15",
"description":"Отправить копию договора в ООО \"Компания\"",
"start-time":"2022-02-22T12:02:22.222+03:00",
"end-time":"2022-02-22T12:22:22.222+03:00",
"color":"#fff",
"status":"completed",
"due-date":"2022-02-22T22:02:22.222+03:00",
"duration":null,
"progress": 0.0,
"address-coordinates": {
"latitude": 55.78,
"longitude": 37.64
},
"customs":{
"custom-1":"Важный клиент",
"custom-943":"2022-02-22T12:02:22.222+03:00"
},
"created-at":"2022-02-22T12:02:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"completed-at":"2022-02-22T22:02:22.222+03:00",
"archived-at":null
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Отправить копию договора | да | Имя задачи |
address | string |
Ленинский 15 | да | Адрес |
address-coordinates | json |
{"latitude": 55.78, "longitude": 37.64} | да | Координаты адреса: долгота и широта |
description | string |
Отправить копию договора в ООО "Компания" | да | Подробное описание задачи |
start-time | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Время начала |
end-time | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Время окончания |
due-date | datetime |
2022-02-22T22:02:22.222+03:00 |
да | Дедлайн |
color | string |
#fff | да | Цвет |
status | string |
completed, overdue, opened | нет | Статус |
custom | hash |
{"custom-1":'custom value'} |
да | Свои поля |
created-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата создания |
completed-at | datetime |
2022-02-22T22:02:22.222+03:00 |
да | Дата завершения |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
archived-at | datetime |
2022-02-22T22:02:22.222+03:00 |
да | Дата архивации |
discarded-at | datetime |
2022-02-22T22:02:22.222+03:00 |
да | Дата перемещения в корзину |
completed-result | string |
2022-02-22T22:02:22.222+03:00 |
да | Результат завершения |
previous-responsible-id | integer |
2 |
нет | Предыдущий ответственный |
progress | float |
100.0 |
да | Процент завершения задачи |
* Обязательные поля
Связи
Пример данных (перечислены не все связи)
{
"data": {
"type":"diary-tasks",
"id":"2",
"relationships":{
"responsible":{
"links":{
"self":"/api/v1/diary-tasks/2/relationships/responsible",
"related":"/api/v1/diary-tasks/2/responsible"
}
},
"company":{
"links":{
"self":"/api/v1/diary-tasks/2/relationships/company",
"related":"/api/v1/diary-tasks/2/company"
}
}
}
}
}
Пример запроса с загруженными сделками и контактами
curl "https://app.synergycrm.ru/api/v1/diary-tasks?include=deal,contact" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/diary-tasks?include=deal,contact");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/diary-tasks?include=deal,contact')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/diary-tasks?include=deal,contact", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-tasks?include=deal,contact',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/diary-tasks?include=deal,contact"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/diary-tasks?include=deal,contact'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Ответственный | responsible | users |
Создатель | user | users |
Компания | company | companies |
Контакт | contact | contacts |
Сделка | deal | deals |
Заявка | order | orders |
Тип задачи | diary-type | diary-types |
Группа задач | project-task-categories | project-task-categories |
Приоритет | diary-priority | diary-priorities |
Соисполнители | performers | users |
Компании | companies | companies |
Контакты | contacts | contacts |
Сделки | deals | deals |
Заявки | orders | orders |
Постановщик | initiator | users |
Метки | labels | labels |
Подзадачи | diaries | diaries |
Сегменты | segments | segments |
Файлы | documents | documents |
Фильтры
Получить список задач созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/diary-tasks" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/diary-tasks?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/diary-tasks?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/diary-tasks?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-tasks?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/diary-tasks?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/diary-tasks?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
responsible-id | Вывести задачи по определенному ответственному | filter[responsible-id]=2 |
user-id | Вывести задачи по определенному создателю | filter[user-id]=2 |
initiator-id | Вывести задачи по определенному постановщику | filter[initiator-id]=2 |
diary-priority-id | Вывести задачи по определенному приоритету | filter[diary-priority-id]=2 |
created-at-gte | Вывести задачи созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести задачи созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
completed-at-gte | Вывести задачи завершенные после указанного времени | filter[completed-at-gte]=2022.02.22 12:00 |
completed-at-lte | Вывести задачи завершенные до указанного времени | filter[completed-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести задачи обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести задачи обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
due-date-gte | Вывести задачи с дедлайном после указанного времени | filter[due-date-gte]=2022.02.22 12:00 |
due-date-lte | Вывести задачи с дедлайном до указанного времени | filter[due-date-lte]=2022.02.22 12:00 |
started-gte | Вывести задачи имеющие даты начала позднее указанного времени | filter[started-gte]=2022.02.22 12:00 |
started-lte | Вывести задачи имеющие даты начала раннего до указанного времени | filter[started-lte]=2022.02.22 12:00 |
expired-gte | Вывести задачи истекающие после указанного времени | filter[expired-gte]=2022.02.22 12:00 |
expired-lte | Вывести задачи истекающие до указанного времени | filter[expired-lte]=2022.02.22 12:00 |
table-state-id | Вывести задачи по заданному табличному фильтру | filter[table-state-id]=2 |
q | Вывести задачи по поисковому запросу | filter[q]=some-query |
archived | Вывести задачи в архиве | filter[archived]=2 |
discarded | Вывести задачи в корзине | filter[discarded]=2 |
actual | Вывести актуальные задачи | filter[actual]=2 |
diary-type-id | Вывести задачи по типу задачи | filter[diary-type-id]=2 |
discarded-at-null | Вывести задачи не в корзине | filter[discarded-at-null]=true |
completed-at-null | Вывести незавершенные задачи | filter[completed-at-null]=true |
due-date-null | Вывести задачи без дедлайна | filter[due-date-null]=true |
Типы задач
Получение списка типов задач
curl "https://app.synergycrm.ru/api/v1/diary-types" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/diary-types");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/diary-types')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/diary-types", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-types',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/diary-types"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/diary-types'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
curl "https://app.synergycrm.ru/api/v1/diary-types" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"diary-types",
"attributes":{
"name": "Тип задачи",
"color": "#b43f18",
"regulations": "Текст регламента"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/diary-types");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"diary-types\",\"attributes\":{\"name\": \"Тип задачи\",\"color\": \"#b43f18\",\"regulations\": \"Текст регламента\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/diary-types')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"diary-types",
"attributes":{
"name": "Тип задачи",
"color": "#b43f18",
"regulations": "Текст регламента"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"diary-types",
"attributes":{
"name": "Тип задачи",
"color": "#b43f18",
"regulations": "Текст регламента"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/diary-types", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-types',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"diary-types",
"attributes":{
"name": "Тип задачи",
"color": "#b43f18",
"regulations": "Текст регламента"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/diary-types"
payload = json.dumps({
"data":{
"type":"diary-types",
"attributes":{
"name": "Тип задачи",
"color": "#b43f18",
"regulations": "Текст регламента"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/diary-types'));
request.body = json.encode({
"data":{
"type":"diary-types",
"attributes":{
"name": "Тип задачи",
"color": "#b43f18",
"regulations": "Текст регламента"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | diary-types |
URL | /api/v1/diary-types |
Список | GET /api/v1/diary-types |
Чтение | GET /api/v1/diary-types/{id} |
Создание | POST /api/v1/diary-types |
Редактирование | PATCH /api/v1/diary-types/{id} |
Удаление | DELETE /api/v1/diary-types/{id} |
Атрибуты
Атрибуты типа задачи
{
"data": [
{
"id": "2",
"type": "diary-types",
"links": {
"self": "https://synergycrm.ru/api/v1/diary-types/2"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "Тип задачи",
"is-call": null,
"regulations": "Текст регламента",
"color": "#b43f18"
},
"relationships": {
"tasks": {
"links": {
"self": "https://synergycrm.ru/api/v1/diary-types/2/relationships/tasks",
"related": "https://synergycrm.ru/api/v1/diary-types/2/tasks"
}
}
}
}
]
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Пример типа задачи | да | Имя типа задачи |
color | string |
#b43f18 | да | Цвет |
regulations | string |
Текст регламента | да | Текст регламента |
created-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:02:22.222+03:00 |
нет | Дата обновления |
cached-at | datetime |
2022-02-22T12:02:22.222+03:00 |
нет | Дата кеширования |
* Обязательные поля
Приоритеты
Создание приоритета задачи
curl "https://app.synergycrm.ru/api/v1/diary-priorities" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"diary-priorities",
"attributes":{
"name":"Приоритет задачи в API",
"color":"#000000"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/diary-priorities");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"diary-priorities\",\"attributes\":{\"name\":\"Приоритет задачи в API\",\"color\":\"#000000\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/diary-priorities')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"diary-priorities",
"attributes":{
"name":"Приоритет задачи в API",
"color":"#000000"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"diary-priorities",
"attributes":{
"name":"Приоритет задачи в API",
"color":"#000000"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/diary-priorities", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-priorities',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"diary-priorities",
"attributes":{
"name":"Приоритет задачи в API",
"color":"#000000"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/diary-priorities"
payload = json.dumps({
"data":{
"type":"diary-priorities",
"attributes":{
"name":"Приоритет задачи в API",
"color":"#000000"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/diary-priorities'));
request.body = json.encode({
"data":{
"type":"diary-priorities",
"attributes":{
"name":"Приоритет задачи в API",
"color":"#000000"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | diary-priorities |
URL | /api/v1/diary-priorities |
Список | GET /api/v1/diary-priorities |
Чтение | GET /api/v1/diary-priorities/{id} |
Создание | POST /api/v1/diary-priorities |
Редактирование | PATCH /api/v1/diary-priorities/{id} |
Удаление | DELETE /api/v1/diary-priorities/{id} |
Атрибуты
Атрибуты приоритета задачи
{
"data": {
"type":"diary-priorities",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:02:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Мой приоритет задачи",
"color": "#1f2f3f"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Мой приоритет задачи | да | Название приоритета |
color | string |
#1f2f3f | да | Цвет приоритета |
created-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Вложенные объекты задачи
Добавление подзадачи в задачу
curl "https://app.synergycrm.ru/api/v1/diary-entities" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"diary-entities",
"relationships":{
"diary":{
"data":{
"type":"diaries",
"id": 2
}
},
"entity":{
"data":{
"type":"deals",
"id": 22
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/diary-entities");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"diary-entities\",\"relationships\":{\"diary\":{\"data\":{\"type\":\"diaries\",\"id\": 2}},\"entity\":{\"data\":{\"type\":\"deals\",\"id\": 22}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/diary-entities')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"diary-entities",
"relationships":{
"diary":{
"data":{
"type":"diaries",
"id": 2
}
},
"entity":{
"data":{
"type":"deals",
"id": 22
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"diary-entities",
"relationships":{
"diary":{
"data":{
"type":"diaries",
"id": 2
}
},
"entity":{
"data":{
"type":"deals",
"id": 22
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/diary-entities", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-entities',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"diary-entities",
"relationships":{
"diary":{
"data":{
"type":"diaries",
"id": 2
}
},
"entity":{
"data":{
"type":"deals",
"id": 22
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/diary-entities"
payload = json.dumps({
"data":{
"type":"diary-entities",
"relationships":{
"diary":{
"data":{
"type":"diaries",
"id": 2
}
},
"entity":{
"data":{
"type":"deals",
"id": 22
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/diary-entities'));
request.body = json.encode({
"data":{
"type":"diary-entities",
"relationships":{
"diary":{
"data":{
"type":"diaries",
"id": 2
}
},
"entity":{
"data":{
"type":"deals",
"id": 22
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | diary-entities |
URL | /api/v1/diary-entities |
Список | GET /api/v1/diary-entities |
Чтение | GET /api/v1/diary-entities/{id} |
Создание | POST /api/v1/diary-entities |
Редактирование | PATCH /api/v1/diary-entities/{id} |
Удаление | DELETE /api/v1/diary-entities/{id} |
Связи
Пример данных
{
"data": {
"type":"products",
"id":"2",
"relationships":{
"diary":{
"links":{
"self":"/api/v1/diary-entities/2/relationships/diary",
"related":"/api/v1/diary-entities/2/diary"
}
},
"entity":{
"links":{
"self":"/api/v1/diary-entities/2/relationships/entity",
"related":"/api/v1/diary-entities/2/entity"
}
}
}
}
}
Пример запроса с загруженным объектом
curl "https://app.synergycrm.ru/api/v1/diary-entities??filter[entity-id]=2&filter[entity-type]=deals&include=entity" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/diary-entities??filter[entity-id]=2&filter[entity-type]=deals&include=entity");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/diary-entities??filter[entity-id]=2&filter[entity-type]=deals&include=entity')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/diary-entities??filter[entity-id]=2&filter[entity-type]=deals&include=entity", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-entities??filter[entity-id]=2&filter[entity-type]=deals&include=entity',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/diary-entities??filter[entity-id]=2&filter[entity-type]=deals&include=entity"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/diary-entities??filter[entity-id]=2&filter[entity-type]=deals&include=entity'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Задача | diary | diaries |
Объект | entity | deals , orders , contacts , companies , estate-properties , contact-groups , contracts , document-template-renders , products , diaries , invoices , checkups |
Атрибуты
Атрибуты вложенных в задачу объектов
{
"data": {
"type":"diary-entities",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
Фильтры
Получить список вложенных в задачу объектов по определённой сделке
curl -G "https://app.synergycrm.ru/api/v1/diary-entities/?filter[entity-id]=2&filter[entity-type]=deals" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/diary-entities/?filter[entity-id]=2&filter[entity-type]=deals");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/diary-entities/?filter[entity-id]=2&filter[entity-type]=deals')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/diary-entities/?filter[entity-id]=2&filter[entity-type]=deals", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/diary-entities/?filter[entity-id]=2&filter[entity-type]=deals',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/diary-entities/?filter[entity-id]=2&filter[entity-type]=deals"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/diary-entities/?filter[entity-id]=2&filter[entity-type]=deals'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
entity-id | Вывести объекты по определенному entity-id |
filter[entity-id]=2 |
entity-type | Вывести объекты по определенному entity-type . Допустимые значения: contacts , deals , orders , companies |
filter[entity-type]=contacts |
created-at-gte | Вывести объекты созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести объекты созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести объекты обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести объекты обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Записи
Создание записи
curl "https://app.synergycrm.ru/api/v1/entries" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"entries",
"attributes":{
"start-time":"2022-02-22 22:22 +0300",
"duration":"02:00"
},
"relationships":{
"calendar": {
"data": {
"type": "calendars",
"id": 2
}
},
"resource": {
"data": {
"type": "calendar-resources",
"id": 2
}
},
"responsible": {
"data": {
"type": "users",
"id": 2
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/entries");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"entries\",\"attributes\":{\"start-time\":\"2022-02-22 22:22 +0300\",\"duration\":\"02:00\"},\"relationships\":{\"calendar\": {\"data\": {\"type\": \"calendars\",\"id\": 2}},\"resource\": {\"data\": {\"type\": \"calendar-resources\",\"id\": 2}},\"responsible\": {\"data\": {\"type\": \"users\",\"id\": 2}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/entries')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"entries",
"attributes":{
"start-time":"2022-02-22 22:22 +0300",
"duration":"02:00"
},
"relationships":{
"calendar": {
"data": {
"type": "calendars",
"id": 2
}
},
"resource": {
"data": {
"type": "calendar-resources",
"id": 2
}
},
"responsible": {
"data": {
"type": "users",
"id": 2
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"entries",
"attributes":{
"start-time":"2022-02-22 22:22 +0300",
"duration":"02:00"
},
"relationships":{
"calendar": {
"data": {
"type": "calendars",
"id": 2
}
},
"resource": {
"data": {
"type": "calendar-resources",
"id": 2
}
},
"responsible": {
"data": {
"type": "users",
"id": 2
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/entries", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/entries',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"entries",
"attributes":{
"start-time":"2022-02-22 22:22 +0300",
"duration":"02:00"
},
"relationships":{
"calendar": {
"data": {
"type": "calendars",
"id": 2
}
},
"resource": {
"data": {
"type": "calendar-resources",
"id": 2
}
},
"responsible": {
"data": {
"type": "users",
"id": 2
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/entries"
payload = json.dumps({
"data":{
"type":"entries",
"attributes":{
"start-time":"2022-02-22 22:22 +0300",
"duration":"02:00"
},
"relationships":{
"calendar": {
"data": {
"type": "calendars",
"id": 2
}
},
"resource": {
"data": {
"type": "calendar-resources",
"id": 2
}
},
"responsible": {
"data": {
"type": "users",
"id": 2
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/entries'));
request.body = json.encode({
"data":{
"type":"entries",
"attributes":{
"start-time":"2022-02-22 22:22 +0300",
"duration":"02:00"
},
"relationships":{
"calendar": {
"data": {
"type": "calendars",
"id": 2
}
},
"resource": {
"data": {
"type": "calendar-resources",
"id": 2
}
},
"responsible": {
"data": {
"type": "users",
"id": 2
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | entries |
URL | /api/v1/entries |
Список | GET /api/v1/entries |
Чтение | GET /api/v1/entries/{id} |
Создание | POST /api/v1/entries |
Редактирование | PATCH /api/v1/entries/{id} |
Удаление | DELETE /api/v1/entries/{id} |
Атрибуты
Атрибуты записи
{
"data": {
"type":"entries",
"id": 2,
"attributes":{
"start-time":"2022-02-22 22:22 +0300",
"duration":"00:30",
"created-at":"2022-02-22T12:02:22.222+03:00",
"updated-at":"2022-02-22T12:02:22.222+03:00"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name | string |
Наименование | да | Название |
start-time* | datetime |
2022-02-22 22:22 +0300 |
да | Время начала |
duration* | string |
00:30 |
да | Длительность |
comment | string |
Примечание | да | Примечание |
created-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:02:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Связи
Пример данных (перечислены не все связи)
{
"data": {
"type":"entries",
"id":"2",
"relationships":{
"calendar": {
"data": {
"type": "calendars",
"id": 2
}
},
"resource": {
"data": {
"type": "calendar-resources",
"id": 200
}
},
"responsible": {
"data": {
"type": "users",
"id": 22
}
}
}
}
}
Название | Связь | JSON API type |
---|---|---|
Создатель | creator | users |
Ответственный | responsible | users |
Ресурс | resource | calendar-resources |
Календарь | calendar | calendars |
Статус | status | entry-statuses |
Вид услуги | service | service-kinds |
Источник | source | sources |
Компании | companies | companies |
Контакты | contacts | contacts |
Сделки | deals | deals |
Заявки | orders | orders |
Осмотры | checkups | checkups |
Вложенные продукты | entities-products | entity-products |
Документы | document-template-renders | document-template-renders |
Фильтры
Получить список осмотров по запросу
curl -G "https://app.synergycrm.ru/api/v1/entries/?filter[q]=Осмотр" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/entries/?filter[q]=Осмотр");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/entries/?filter[q]=Осмотр')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/entries/?filter[q]=Осмотр", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/entries/?filter[q]=Осмотр',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/entries/?filter[q]=Осмотр"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/entries/?filter[q]=Осмотр'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести записи созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести записи созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести записи обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести записи обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
discarded-at-gte | Вывести записи в корзине после указанного времени | filter[discarded-at-gte]=2022.02.22 12:00 |
discarded-at-lte | Вывести записи в корзине до указанного времени | filter[discarded-at-lte]=2022.02.22 12:00 |
responsible-id | Вывести записи по определенному ответственному | filter[responsible-id]=2 |
user-id | Вывести записи по определенному создателю | filter[user-id]=2 |
archived | Вывести записи в архиве | filter[archived]=2 |
discarded | Вывести записи в корзине | filter[discarded]=2 |
actual | Вывести актуальные записи | filter[actual]=2 |
discarded-at-null | Вывести записи не в корзине | filter[discarded-at-null]=true |
table-state-id | Вывести записи по заданному табличному фильтру | filter[table-state-id]=2 |
q | Вывести записи по поисковому запросу | filter[q]=some-query |
Календари
Создание календаря
curl "https://app.synergycrm.ru/api/v1/calendars" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"calendars",
"attributes":{
"name":"Мой календарь"
}
},
"relationships":{
"calendar-category":{
"data":{
"type":"calendar-categories",
"id":2
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/calendars");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"calendars\",\"attributes\":{\"name\":\"Мой календарь\"}},\"relationships\":{\"calendar-category\":{\"data\":{\"type\":\"calendar-categories\",\"id\":2}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/calendars')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"calendars",
"attributes":{
"name":"Мой календарь"
}
},
"relationships":{
"calendar-category":{
"data":{
"type":"calendar-categories",
"id":2
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"calendars",
"attributes":{
"name":"Мой календарь"
}
},
"relationships":{
"calendar-category":{
"data":{
"type":"calendar-categories",
"id":2
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/calendars", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendars',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"calendars",
"attributes":{
"name":"Мой календарь"
}
},
"relationships":{
"calendar-category":{
"data":{
"type":"calendar-categories",
"id":2
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/calendars"
payload = json.dumps({
"data":{
"type":"calendars",
"attributes":{
"name":"Мой календарь"
}
},
"relationships":{
"calendar-category":{
"data":{
"type":"calendar-categories",
"id":2
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/calendars'));
request.body = json.encode({
"data":{
"type":"calendars",
"attributes":{
"name":"Мой календарь"
}
},
"relationships":{
"calendar-category":{
"data":{
"type":"calendar-categories",
"id":2
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Атрибуты
Атрибуты календаря
{
"data": {
"id": "2",
"type": "calendars",
"links": {
"self": "https://app.synergycrm.ru/api/v1/calendars/2"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"name": "Мой календарь",
"start-time":"2022-02-22 09:00 +0300",
"end-time":"2022-02-22 18:00 +0300",
"address": "Кремлевская, 2, корп. 2",
"resource-alias-plural": "Кабинеты",
"resource-alias-singular": "Кабинет",
"entry-background": "service",
"entry-step": 15,
"phone": "+79876543211",
"view-type": "timelineMonth",
"notify_schedule_change": true
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Мой календарь | да | Название |
start-time | datetime |
2022-02-22 09:00 +0300 |
да | Время начала |
end-time | datetime |
2022-02-22 18:00 +0300 |
да | Время окончания |
address | string |
Кремлевская, 2, корп. 2 | да | Адрес |
resource-alias-plural | string |
Кабинеты | да | Имя ресурса, множ. число |
resource-alias-singular | string |
Кабинет | да | Имя ресурса, ед. число |
entry-background | string |
service , status , responsible |
да | Цвет фона карточки записи (статуса, услуги или сотрудника) |
entry-step | integer |
15 | да | Шаг записи (минут) |
phone | string |
+79876543211 | да | Телефон |
view-type | string |
timelineMonth |
да | Вид календаря (timeGrid - вертикальный, timelineDay - горизонтальный на день, timelineMonth - горизонтальный на месяц) |
notify-schedule-change | boolean |
true | да | Уведомлять об изменении режима работы сотрудника в календаре |
* Обязательные поля
Фильтры
Получить список календарей созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/calendars" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/calendars?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/calendars?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/calendars?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendars?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/calendars?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/calendars?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести календари созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести календари созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести календари обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести календари обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Категории календарей
Создание категории календарей
curl "https://app.synergycrm.ru/api/v1/calendar-categories" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"calendar-categories",
"attributes":{
"name":"Название категории календарей"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/calendar-categories");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"calendar-categories\",\"attributes\":{\"name\":\"Название категории календарей\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/calendar-categories')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"calendar-categories",
"attributes":{
"name":"Название категории календарей"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"calendar-categories",
"attributes":{
"name":"Название категории календарей"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/calendar-categories", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendar-categories',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"calendar-categories",
"attributes":{
"name":"Название категории календарей"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/calendar-categories"
payload = json.dumps({
"data":{
"type":"calendar-categories",
"attributes":{
"name":"Название категории календарей"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/calendar-categories'));
request.body = json.encode({
"data":{
"type":"calendar-categories",
"attributes":{
"name":"Название категории календарей"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Атрибуты
Атрибуты категории календарей
{
"data": {
"id": "2",
"type": "calendar-categories",
"links": {
"self": "https://app.synergycrm.ru/api/v1/calendar-categories/2"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"name": "Название категории календарей",
"position": 2
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Название категории календарей | да | Название |
position | integer |
2 | да | Позиция в списке |
* Обязательные поля
Фильтры
Получить список категорий календарей созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/calendar-categories" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/calendar-categories?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/calendar-categories?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/calendar-categories?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendar-categories?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/calendar-categories?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/calendar-categories?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести категории календарей, созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести категории календарей, созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести категории календарей, обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести категории календарей, обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Ресурс календаря
Создание ресурса в календаре
curl "https://app.synergycrm.ru/api/v1/calendar-resources" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"calendar-resources",
"attributes":{
"name":"Кабинет 1",
"short-name": "К1"
},
"relationships":{
"calendar-resource-category":{
"data":{
"type":"calendar-resource-categories",
"id":2
}
},
"calendar":{
"data":{
"type":"calendars",
"id":2
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/calendar-resources");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"calendar-resources\",\"attributes\":{\"name\":\"Кабинет 1\",\"short-name\": \"К1\"},\"relationships\":{\"calendar-resource-category\":{\"data\":{\"type\":\"calendar-resource-categories\",\"id\":2}},\"calendar\":{\"data\":{\"type\":\"calendars\",\"id\":2}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/calendar-resources')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"calendar-resources",
"attributes":{
"name":"Кабинет 1",
"short-name": "К1"
},
"relationships":{
"calendar-resource-category":{
"data":{
"type":"calendar-resource-categories",
"id":2
}
},
"calendar":{
"data":{
"type":"calendars",
"id":2
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"calendar-resources",
"attributes":{
"name":"Кабинет 1",
"short-name": "К1"
},
"relationships":{
"calendar-resource-category":{
"data":{
"type":"calendar-resource-categories",
"id":2
}
},
"calendar":{
"data":{
"type":"calendars",
"id":2
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/calendar-resources", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendar-resources',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"calendar-resources",
"attributes":{
"name":"Кабинет 1",
"short-name": "К1"
},
"relationships":{
"calendar-resource-category":{
"data":{
"type":"calendar-resource-categories",
"id":2
}
},
"calendar":{
"data":{
"type":"calendars",
"id":2
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/calendar-resources"
payload = json.dumps({
"data":{
"type":"calendar-resources",
"attributes":{
"name":"Кабинет 1",
"short-name": "К1"
},
"relationships":{
"calendar-resource-category":{
"data":{
"type":"calendar-resource-categories",
"id":2
}
},
"calendar":{
"data":{
"type":"calendars",
"id":2
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/calendar-resources'));
request.body = json.encode({
"data":{
"type":"calendar-resources",
"attributes":{
"name":"Кабинет 1",
"short-name": "К1"
},
"relationships":{
"calendar-resource-category":{
"data":{
"type":"calendar-resource-categories",
"id":2
}
},
"calendar":{
"data":{
"type":"calendars",
"id":2
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Атрибуты
Атрибуты ресурса
{
"data": {
"id": "2",
"type": "calendar-resources",
"links": {
"self": "https://app.synergycrm.ru/api/v1/calendar-resources/2"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"name": "Кабинет 1",
"short-name": "К1",
"color": "#c6c6c6",
"visit-duration": "00:30",
"position": 2
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Кабинет 1 | да | Название |
short-name* | string |
К1 | да | Сокращенное название |
color | string |
#c6c6c6 | да | Цвет |
visit-duration | string |
00:30 | да | Длительность визита |
position | integer |
2 | да | Позиция в списке |
* Обязательные поля
Фильтры
Получить список категорий ресурсов созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/calendar-resources" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/calendar-resources?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/calendar-resources?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/calendar-resources?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendar-resources?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/calendar-resources?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/calendar-resources?filter[created-at-gte]=2022.02.22 12:00'));
request.body = json.encode();
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести ресурсы, созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести ресурсы, созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести ресурсы, обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести ресурсы, обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Категории ресурсов в календаре
Создание категории ресурсов для календаря
curl "https://app.synergycrm.ru/api/v1/calendar-resource-categories" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"calendar-resource-categories",
"attributes":{
"name":"Категория ресурсов в календаре"
},
"relationships":{
"calendar":{
"data":{
"type":"calendars",
"id":2
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/calendar-resource-categories");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"calendar-resource-categories\",\"attributes\":{\"name\":\"Категория ресурсов в календаре\"},\"relationships\":{\"calendar\":{\"data\":{\"type\":\"calendars\",\"id\":2}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/calendar-resource-categories')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"calendar-resource-categories",
"attributes":{
"name":"Категория ресурсов в календаре"
},
"relationships":{
"calendar":{
"data":{
"type":"calendars",
"id":2
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"calendar-resource-categories",
"attributes":{
"name":"Категория ресурсов в календаре"
},
"relationships":{
"calendar":{
"data":{
"type":"calendars",
"id":2
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/calendar-resource-categories", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendar-resource-categories',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"calendar-resource-categories",
"attributes":{
"name":"Категория ресурсов в календаре"
},
"relationships":{
"calendar":{
"data":{
"type":"calendars",
"id":2
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/calendar-resource-categories"
payload = json.dumps({
"data":{
"type":"calendar-resource-categories",
"attributes":{
"name":"Категория ресурсов в календаре"
},
"relationships":{
"calendar":{
"data":{
"type":"calendars",
"id":2
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/calendar-resource-categories'));
request.body = json.encode({
"data":{
"type":"calendar-resource-categories",
"attributes":{
"name":"Категория ресурсов в календаре"
},
"relationships":{
"calendar":{
"data":{
"type":"calendars",
"id":2
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Атрибуты
Атрибуты категории ресурсов в календаре
{
"data": {
"id": "2",
"type": "calendar-resource-categories",
"links": {
"self": "https://app.synergycrm.ru/api/v1/calendar-resource-categories/2"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"name": "Категория ресурсов в календаре",
"position": 2
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Категория ресурсов | да | Название |
position | integer |
2 | да | Позиция в списке |
* Обязательные поля
Фильтры
Получить список категорий ресурсов созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/calendar-resource-categories" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/calendar-resource-categories?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/calendar-resource-categories?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/calendar-resource-categories?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendar-resource-categories?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/calendar-resource-categories?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-resource-categories'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести категории ресурсов, созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести категории ресурсов, созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести категории ресурсов, обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести категории ресурсов, обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Связи
Загрузка категорий ресурсов по календарю (id = 2)
curl "https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-resource-categories" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-resource-categories");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-resource-categories')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-resource-categories", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-resource-categories',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-resource-categories"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-resource-categories'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Название | Связь | JSON API type |
---|---|---|
Календарь | calendar | calendars |
Режим работы сотрудника в календаре
Создание режима работы сотрудника в календаре
curl "https://app.synergycrm.ru/api/v1/calendar-schedules" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"calendar-schedules",
"attributes":{
"start-time":"2022-02-22 09:00 +0300",
"end-time":"2022-02-22 18:00 +0300"
},
"relationships":{
"calendar":{
"data":{
"type":"calendars",
"id":2
}
},
"user":{
"data":{
"type":"users",
"id":2
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/calendar-schedules");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"calendar-schedules\",\"attributes\":{\"start-time\":\"2022-02-22 09:00 +0300\",\"end-time\":\"2022-02-22 18:00 +0300\"},\"relationships\":{\"calendar\":{\"data\":{\"type\":\"calendars\",\"id\":2}},\"user\":{\"data\":{\"type\":\"users\",\"id\":2}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/calendar-schedules')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"calendar-schedules",
"attributes":{
"start-time":"2022-02-22 09:00 +0300",
"end-time":"2022-02-22 18:00 +0300"
},
"relationships":{
"calendar":{
"data":{
"type":"calendars",
"id":2
}
},
"user":{
"data":{
"type":"users",
"id":2
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"calendar-schedules",
"attributes":{
"start-time":"2022-02-22 09:00 +0300",
"end-time":"2022-02-22 18:00 +0300"
},
"relationships":{
"calendar":{
"data":{
"type":"calendars",
"id":2
}
},
"user":{
"data":{
"type":"users",
"id":2
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/calendar-schedules", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendar-schedules',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"calendar-schedules",
"attributes":{
"start-time":"2022-02-22 09:00 +0300",
"end-time":"2022-02-22 18:00 +0300"
},
"relationships":{
"calendar":{
"data":{
"type":"calendars",
"id":2
}
},
"user":{
"data":{
"type":"users",
"id":2
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/calendar-schedules"
payload = json.dumps({
"data":{
"type":"calendar-schedules",
"attributes":{
"start-time":"2022-02-22 09:00 +0300",
"end-time":"2022-02-22 18:00 +0300"
},
"relationships":{
"calendar":{
"data":{
"type":"calendars",
"id":2
}
},
"user":{
"data":{
"type":"users",
"id":2
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/calendar-schedules'));
request.body = json.encode({
"data":{
"type":"calendar-schedules",
"attributes":{
"start-time":"2022-02-22 09:00 +0300",
"end-time":"2022-02-22 18:00 +0300"
},
"relationships":{
"calendar":{
"data":{
"type":"calendars",
"id":2
}
},
"user":{
"data":{
"type":"users",
"id":2
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Атрибуты
Атрибуты рабочего времени
{
"data": {
"id": "2",
"type": "calendar-schedules",
"links": {
"self": "https://app.synergycrm.ru/api/v1/calendar-schedules/37"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"start-time":"2022-02-22 09:00 +0300",
"end-time":"2022-02-22 18:00 +0300"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
start-time* | datetime |
2022-02-22 09:00 +0300 |
да | Время начала работы |
end-time* | datetime |
2022-02-22 18:00 +0300 |
да | Время окончания работы |
* Обязательные поля
Фильтры
Получить список режимов работы, созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/calendar-schedules" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/calendar-schedules?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/calendar-schedules?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/calendar-schedules?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendar-schedules?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/calendar-schedules?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/calendar-schedules?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести режимы работы, созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести режимы работы, созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести режимы работы, обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести режимы работы, обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Связи
Загрузка режима работы сотрудника по календарю (id = 2)
curl "https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-schedules" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-schedules");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-schedules')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-schedules", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-schedules',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-schedules"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/calendars/2/relationships/calendar-schedules'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Название | Связь | JSON API type |
---|---|---|
Календарь | calendar | calendars |
Сотрудник | user | users |
Ресурс | resource | calendar-resources |
* Обязательные связи
Виды услуг
Создание вида услуг
curl "https://app.synergycrm.ru/api/v1/service-kinds" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"service-kinds",
"attributes":{
"name":"Консультация"
},
"relationships":{
"service-kind-category":{
"data":{
"type":"service-kind-categories",
"id":2
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/service-kinds");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"service-kinds\",\"attributes\":{\"name\":\"Консультация\"},\"relationships\":{\"service-kind-category\":{\"data\":{\"type\":\"service-kind-categories\",\"id\":2}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/service-kinds')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"service-kinds",
"attributes":{
"name":"Консультация"
},
"relationships":{
"service-kind-category":{
"data":{
"type":"service-kind-categories",
"id":2
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"service-kinds",
"attributes":{
"name":"Консультация"
},
"relationships":{
"service-kind-category":{
"data":{
"type":"service-kind-categories",
"id":2
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/service-kinds", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/service-kinds',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"service-kinds",
"attributes":{
"name":"Консультация"
},
"relationships":{
"service-kind-category":{
"data":{
"type":"service-kind-categories",
"id":2
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/service-kinds"
payload = json.dumps({
"data":{
"type":"service-kinds",
"attributes":{
"name":"Консультация"
},
"relationships":{
"service-kind-category":{
"data":{
"type":"service-kind-categories",
"id":2
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/service-kinds'));
request.body = json.encode({
"data":{
"type":"service-kinds",
"attributes":{
"name":"Консультация"
},
"relationships":{
"service-kind-category":{
"data":{
"type":"service-kind-categories",
"id":2
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Атрибуты
Атрибуты видов услуг
{
"data": {
"id": "2",
"type": "service-kinds",
"links": {
"self": "https://app.synergycrm.ru/api/v1/service-kinds/37"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"name":"Консультация",
"color": "#c6c6c6",
"limit-participants": 2,
"position": 2
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Консультация | да | Название |
color | string |
#c6c6c6 | да | Цвет |
limit-participants | integer |
2 | да | Лимит участников |
position | integer |
2 | да | Позиция в списке |
* Обязательные поля
Фильтры
Получить список видов услуг, созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/service-kinds" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/service-kinds?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/service-kinds?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/service-kinds?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/service-kinds?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/service-kinds?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/service-kinds?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести виды услуг, созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести виды услуг, созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести виды услуг, обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести виды услуг, обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Категории видов услуг
Создание категории видов услуг
curl "https://app.synergycrm.ru/api/v1/service-kind-categories" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"service-kind-categories",
"attributes":{
"name":"Основные"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/service-kind-categories");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"service-kind-categories\",\"attributes\":{\"name\":\"Основные\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/service-kind-categories')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"service-kind-categories",
"attributes":{
"name":"Основные"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"service-kind-categories",
"attributes":{
"name":"Основные"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/service-kind-categories", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/service-kind-categories',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"service-kind-categories",
"attributes":{
"name":"Основные"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/service-kind-categories"
payload = json.dumps({
"data":{
"type":"service-kind-categories",
"attributes":{
"name":"Основные"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/service-kind-categories'));
request.body = json.encode({
"data":{
"type":"service-kind-categories",
"attributes":{
"name":"Основные"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Атрибуты
Атрибуты категорий услуг
{
"data": {
"id": "2",
"type": "service-kind-categories",
"links": {
"self": "https://app.synergycrm.ru/api/v1/service-kind-categories/2"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"name": "Основные",
"position": 2
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Основные | да | Название |
position | integer |
1 | да | Позиция в списке |
* Обязательные поля
Фильтры
Получить список категорий услуг созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/service-kind-categories" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/service-kind-categories?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/service-kind-categories?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/service-kind-categories?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/service-kind-categories?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/service-kind-categories?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/service-kind-categories?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести категории услуг, созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести категории услуг, созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести категории услуг, обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести категории услуг, обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Статусы записи
Создание статуса записи
curl "https://app.synergycrm.ru/api/v1/entry-statuses" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"entry-statuses",
"attributes":{
"name":"Статус записи в API",
"color":"#000000"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/entry-statuses");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"entry-statuses\",\"attributes\":{\"name\":\"Статус записи в API\",\"color\":\"#000000\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/entry-statuses')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"entry-statuses",
"attributes":{
"name":"Статус записи в API",
"color":"#000000"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"entry-statuses",
"attributes":{
"name":"Статус записи в API",
"color":"#000000"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/entry-statuses", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/entry-statuses',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"entry-statuses",
"attributes":{
"name":"Статус записи в API",
"color":"#000000"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/entry-statuses"
payload = json.dumps({
"data":{
"type":"entry-statuses",
"attributes":{
"name":"Статус записи в API",
"color":"#000000"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/entry-statuses'));
request.body = json.encode({
"data":{
"type":"entry-statuses",
"attributes":{
"name":"Статус записи в API",
"color":"#000000"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Атрибуты
Атрибуты статуса записи
{
"data": {
"id": "2",
"type": "entry-statuses",
"links": {
"self": "https://app.synergycrm.ru/api/v1/entry-statuses/2"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"name":"Статус записи в API",
"color":"#000000",
"position": 2
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Статус записи в API | да | Название |
color | string |
#c6c6c6 | да | Цвет |
position | integer |
1 | да | Позиция в списке |
* Обязательные поля
Фильтры
Получить список статусов записей созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/entry-statuses" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/entry-statuses?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/entry-statuses?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/entry-statuses?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/entry-statuses?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/entry-statuses?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/entry-statuses?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести статусы записей, созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести статусы записей, созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести статусы записей, обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести статусы записей, обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Телефония
Создание телефонии
curl "https://app.synergycrm.ru/api/v1/telephonies" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"telephonies",
"attributes":{
"provider":"mango",
"mango-code":"1122",
"mango-sign-key":"signkey"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/telephonies");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"telephonies\",\"attributes\":{\"provider\":\"mango\",\"mango-code\":\"1122\",\"mango-sign-key\":\"signkey\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/telephonies')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"telephonies",
"attributes":{
"provider":"mango",
"mango-code":"1122",
"mango-sign-key":"signkey"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"telephonies",
"attributes":{
"provider":"mango",
"mango-code":"1122",
"mango-sign-key":"signkey"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/telephonies", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/telephonies',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"telephonies",
"attributes":{
"provider":"mango",
"mango-code":"1122",
"mango-sign-key":"signkey"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/telephonies"
payload = json.dumps({
"data":{
"type":"telephonies",
"attributes":{
"provider":"mango",
"mango-code":"1122",
"mango-sign-key":"signkey"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/telephonies'));
request.body = json.encode({
"data":{
"type":"telephonies",
"attributes":{
"provider":"mango",
"mango-code":"1122",
"mango-sign-key":"signkey"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | telephonies |
URL | /api/v1/telephonies |
Список | GET /api/v1/telephonies |
Чтение | GET /api/v1/telephonies/{id} |
Создание | POST /api/v1/telephonies |
Редактирование | PATCH /api/v1/telephonies/{id} |
Удаление | DELETE /api/v1/telephonies/{id} |
Атрибуты
Атрибуты телефонии
{
"data": {
"type":"telephonies",
"id":"2",
"attributes":{
"provider":"mango",
"sipuni-integration-key": null,
"sipuni-system-number": null,
"mango-code":"1122",
"mango-sign-key":"signkey",
"oktell-order-call-url": null,
"dialog-order-call-url": null,
"created-at":"2022-02-22T12:02:22.222+03:00",
"updated-at":"2022-02-22T12:02:22.222+03:00"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
provider* | string |
mango |
да | Провайдер телефонии |
created-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:02:22.222+03:00 |
нет | Дата обновления |
archived-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата архивации |
* Обязательные поля
Ограничения по значениям
Аттрибут | Варианты |
---|---|
provider | API ,sipuni ,mango ,bmi_telecom ,oktell ,dialog |
Некоторые атрибуты зависят от провайдера телефонии.
Атрибуты Sipuni
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
sipuni-integration-key | string |
110012 | да | Ключ интеграции Sipuni |
sipuni-system-number | string |
SomeKey |
да | Системный номер в Sipuni |
Атрибуты Mango
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
mango-code | string |
SomeKey | да | Код интеграции Mango |
mango-sign-key | string |
10201110 | да | Ключ интеграции Mango |
Атрибуты Oktell
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
oktell-order-call-url | string |
http://example.com/ | да | URL для запроса звонка в Oktell |
Атрибуты Dialog
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
dialog-order-call-url | string |
http://example.com/ | да | URL для запроса звонка в Dialog |
Фильтры
Получить список телефоний созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/telephonies" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/telephonies");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("filter[created-at-gte]=2022.02.22 12:00");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/telephonies')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/x-www-form-urlencoded'
req['Authorization'] = 'Bearer api_token'
req.body = 'filter[created-at-gte]=2022.02.22 12:00'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`filter[created-at-gte]=2022.02.22 12:00`)
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/telephonies", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/telephonies?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/telephonies?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/telephonies?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести телефонии созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести телефонии созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести телефонии обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести телефонии обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
table-state-id | Вывести телефонии по заданному табличному фильтру | filter[table-state-id]=2 |
q | Вывести телефонии по поисковому запросу | filter[q]=some-query |
Номера
Создание номера
curl "https://app.synergycrm.ru/api/v1/telephony-phones" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"telephony-phones",
"attributes":{
"number":"+79876543211"
},
"relationships":{
"telephony":{
"data":{
"type":"telephonies",
"id":"2"
}
},
"user":{
"data":{
"type":"users",
"id":"2"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/telephony-phones");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"telephony-phones\",\"attributes\":{\"number\":\"+79876543211\"},\"relationships\":{\"telephony\":{\"data\":{\"type\":\"telephonies\",\"id\":\"2\"}},\"user\":{\"data\":{\"type\":\"users\",\"id\":\"2\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/telephony-phones')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"telephony-phones",
"attributes":{
"number":"+79876543211"
},
"relationships":{
"telephony":{
"data":{
"type":"telephonies",
"id":"2"
}
},
"user":{
"data":{
"type":"users",
"id":"2"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"telephony-phones",
"attributes":{
"number":"+79876543211"
},
"relationships":{
"telephony":{
"data":{
"type":"telephonies",
"id":"2"
}
},
"user":{
"data":{
"type":"users",
"id":"2"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/telephony-phones", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/telephony-phones',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"telephony-phones",
"attributes":{
"number":"+79876543211"
},
"relationships":{
"telephony":{
"data":{
"type":"telephonies",
"id":"2"
}
},
"user":{
"data":{
"type":"users",
"id":"2"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/telephony-phones"
payload = json.dumps({
"data":{
"type":"telephony-phones",
"attributes":{
"number":"+79876543211"
},
"relationships":{
"telephony":{
"data":{
"type":"telephonies",
"id":"2"
}
},
"user":{
"data":{
"type":"users",
"id":"2"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/telephony-phones'));
request.body = json.encode({
"data":{
"type":"telephony-phones",
"attributes":{
"number":"+79876543211"
},
"relationships":{
"telephony":{
"data":{
"type":"telephonies",
"id":"2"
}
},
"user":{
"data":{
"type":"users",
"id":"2"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | telephony-phones |
URL | /api/v1/telephony-phones |
Список | GET /api/v1/telephony-phones |
Чтение | GET /api/v1/telephony-phones/{id} |
Создание | POST /api/v1/telephony-phones |
Редактирование | PATCH /api/v1/telephony-phones/{id} |
Удаление | DELETE /api/v1/telephony-phones/{id} |
Атрибуты номеров
Атрибуты номеров
{
"data": {
"type":"telephony-phones",
"id":"1",
"attributes":{
"number":"112",
"created-at":"2016-11-26T12:07:51.572+03:00",
"updated-at":"2016-11-26T12:07:51.572+03:00"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
number* | string |
3301 |
да | Номер телефона |
created-at | datetime |
2016-11-26T12:07:51.572+03:00 |
да | Дата создания |
updated-at | datetime |
2016-11-26T12:07:51.572+03:00 |
нет | Дата обновления |
* Обязательные поля
Связи номеров
Пример данных
{
"data": {
"type":"telephonies-phones",
"id":"1",
"relationships":{
"telephony":{
"links":{
"self":"/api/v1/telephonies-phone/1/relationships/telephony",
"related":"/api/v1/telephonies-phone/1/telephony"
}
},
"user":{
"links":{
"self":"/api/v1/telephonies-phone/1/relationships/user",
"related":"/api/v1/telephonies-phone/1/user"
}
}
}
}
}
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Для создания номера телефона, в связях обязательно должны указываться сотрудник, которому присваивается номер,
и телефония, в которой этот номер будет функционировать.
Название | Связь | JSON API type |
---|---|---|
Телефония | telephony | telephonies |
Сотрудник | user | users |
Фильтры
Получить список номеров телефонов по определённому пользователю
curl -G "https://app.synergycrm.ru/api/v1/telephony-phones" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[user]=2"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/telephony-phones?filter[user]=2");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/telephony-phones?filter[user]=2')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/telephony-phones?filter[user]=2", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/telephony-phones?filter[user]=2',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/telephony-phones?filter[user]=2"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/telephony-phones?filter[user]=2'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
user | Вывести номера по определенному user |
filter[user]=2 |
created-at-gte | Вывести номера созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести номера созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести номера обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести номера обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Звонки
Создание звонка
curl "https://app.synergycrm.ru/api/v1/telephony-calls" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"telephony-calls",
"attributes":{
"direction":"planned",
"src-phone-number":"+79876543211",
"planned-at":"2022-02-02 12:22:22 +0300"
},
"relationships":{
"telephony":{
"data":{
"type":"telephonies",
"id":"3"
}
},
"dst-phone":{
"data":{
"type":"telephony-phones",
"id":"2"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/telephony-calls");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"telephony-calls\",\"attributes\":{\"direction\":\"planned\",\"src-phone-number\":\"+79876543211\",\"planned-at\":\"2022-02-02 12:22:22 +0300\"},\"relationships\":{\"telephony\":{\"data\":{\"type\":\"telephonies\",\"id\":\"3\"}},\"dst-phone\":{\"data\":{\"type\":\"telephony-phones\",\"id\":\"2\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/telephony-calls')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"telephony-calls",
"attributes":{
"direction":"planned",
"src-phone-number":"+79876543211",
"planned-at":"2022-02-02 12:22:22 +0300"
},
"relationships":{
"telephony":{
"data":{
"type":"telephonies",
"id":"3"
}
},
"dst-phone":{
"data":{
"type":"telephony-phones",
"id":"2"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"telephony-calls",
"attributes":{
"direction":"planned",
"src-phone-number":"+79876543211",
"planned-at":"2022-02-02 12:22:22 +0300"
},
"relationships":{
"telephony":{
"data":{
"type":"telephonies",
"id":"3"
}
},
"dst-phone":{
"data":{
"type":"telephony-phones",
"id":"2"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/telephony-calls", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/telephony-calls',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"telephony-calls",
"attributes":{
"direction":"planned",
"src-phone-number":"+79876543211",
"planned-at":"2022-02-02 12:22:22 +0300"
},
"relationships":{
"telephony":{
"data":{
"type":"telephonies",
"id":"3"
}
},
"dst-phone":{
"data":{
"type":"telephony-phones",
"id":"2"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/telephony-calls"
payload = json.dumps({
"data":{
"type":"telephony-calls",
"attributes":{
"direction":"planned",
"src-phone-number":"+79876543211",
"planned-at":"2022-02-02 12:22:22 +0300"
},
"relationships":{
"telephony":{
"data":{
"type":"telephonies",
"id":"3"
}
},
"dst-phone":{
"data":{
"type":"telephony-phones",
"id":"2"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/telephony-calls'));
request.body = json.encode({
"data":{
"type":"telephony-calls",
"attributes":{
"direction":"planned",
"src-phone-number":"+79876543211",
"planned-at":"2022-02-02 12:22:22 +0300"
},
"relationships":{
"telephony":{
"data":{
"type":"telephonies",
"id":"3"
}
},
"dst-phone":{
"data":{
"type":"telephony-phones",
"id":"2"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | telephony-calls |
URL | /api/v1/telephony-calls |
Список | GET /api/v1/telephony-calls |
Чтение | GET /api/v1/telephony-calls/{id} |
Создание | POST /api/v1/telephony-calls |
Редактирование | PATCH /api/v1/telephony-calls/{id} |
Удаление | DELETE /api/v1/telephony-calls/{id} |
Атрибуты звонков
Атрибуты звонка
{
"data": {
"type":"telephony-calls",
"id":"2",
"attributes":{
"call-id": "61bbb785-4a8c-4188-97f0-1cc7400e587f",
"direction":"outgoing",
"dst-phone-number": "+79876543211",
"src-phone-number":"222",
"duration": 2000.0,
"created-at":"2022-02-22T12:22:22.222+03:00",
"completed-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"planned-at": null,
"answered-at": "2022-02-22T12:22:22.222+03:00"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
dst-phone-number* | string |
+79876543211 |
да | Номер входящего телефона |
src-phone-number* | string |
222 |
да | Номер исходящего телефона |
direction* | string |
incoming |
да | Тип звонка |
call-id | string |
61bbb785-4a8c-4188-97f0-1cc7400e587f |
да | Идентификатор звонка в АТС |
duration | double |
20000.0 | да | Длительность звонка |
recording | string |
b1a13646 |
да | Идентификатор записи или ссылка на неё |
answered-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата ответа на звонок |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
started-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата начала звонка |
completed-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата окончания звонка |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
planned-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Плановая дата звонка |
* Обязательные поля
Связи звонков
Пример данных (перечислены не все связи)
{
"data": {
"type":"telephonies-calls",
"id":"2",
"relationships":{
"src-phone":{
"links":{
"self":"/api/v1/telephonies-phone/2/relationships/src-phone",
"related":"/api/v1/telephonies-phone/2/src-phone"
}
},
"dst-phone":{
"links":{
"self":"/api/v1/telephonies-phone/2/relationships/dst-phone",
"related":"/api/v1/telephonies-phone/2/dst-phone"
}
}
}
}
}
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Для создания номера телефона, в связях обязательно должен указываться номер в телефонии. В зависимости от типа звонка,
указанного в поле direction
, привязываться он дожен к разным связям.
Название | Связь | JSON API type |
---|---|---|
Телефония* | telephony | telephonies |
Звонящий номер | src-phone | telephony-phones |
Целевой номер | dst-phone | telephony-phones |
Статус | status | telephony-statuses |
* Обязательная связь
Обязательные связи в зависимости от ключа
Ключ | Обязательные связи | Описание |
---|---|---|
outgoing | src-phone |
Исходящий звонок |
incoming | dst-phone |
Входящий звонок |
internal | src-phone и dst-phone |
Внутренний звонок |
planned | dst-phone |
Плановый звонок |
error | src-phone или dst-phone |
Ошибка |
Фильтры
Получить список звонков созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/telephony-calls" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/telephony-calls?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/telephony-calls?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/telephony-calls?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/telephony-calls?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/telephony-calls?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/telephony-calls?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести звонки созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести звонки созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести звонки обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести звонки обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Аудиозаписи
Получение аудиозаписей звонка
curl "https://app.synergycrm.ru/api/v1/telephony-calls/1/recordings" \
-X GET \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/telephony-calls/1/recordings");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/telephony-calls/1/recordings')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/telephony-calls/1/recordings", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/telephony-calls/1/recordings',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/telephony-calls/1/recordings"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/telephony-calls/1/recordings'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | telephony-calls |
Аудиозаписи | GET /api/v1/telephony-calls/{id}/recordings |
Атрибуты аудиозаписей звонков
Пример готовых данных
{
"data": {
"type":"telephony-calls",
"id":"2",
"attributes": {
"recordings": [
"https://example.com/path/to/audio.mp3"
],
"recordings_expires_at":"2022-02-22T12:22:22.222+03:00"
}
}
}
Имя | Тип | Пример | Описание |
---|---|---|---|
recordings | array |
["https://example.com/path/to/audio.mp3"] | Аудиозаписи звонка |
recordings_expires_at | datetime |
2022-02-22T12:22:22.222+03:00 |
Время удаления загруженной аудиозаписи |
Прежде чем получить аудиозаписи звонка, система загружает их, указывая время
удаления прокэшированных копий в recordings_expires_at
. Поэтому, при обращении
к данному методу в тот момент, когда срок хранения записи уже истек, вы получите
сообщение о подготовке данных. В этом случае, для получения аудиозаписей,
повторите запрос через 10 секунд.
Пример подготавливаемых данных
{
"data": {
"type":"telephony-calls",
"id":"2",
"attributes": {
"status":"Идет загрузка записи звонка, повторите запрос через 10 секунд"
}
}
}
Статусы
Создание статуса
curl "https://app.synergycrm.ru/api/v1/telephony-statuses" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"telephony-statuses",
"attributes":{
"name":"Статус телефонии в API",
"color":"#000000"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/telephony-statuses");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"telephony-statuses\",\"attributes\":{\"name\":\"Статус телефонии в API\",\"color\":\"#000000\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/telephony-statuses')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"telephony-statuses",
"attributes":{
"name":"Статус телефонии в API",
"color":"#000000"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"telephony-statuses",
"attributes":{
"name":"Статус телефонии в API",
"color":"#000000"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/telephony-statuses", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/telephony-statuses',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"telephony-statuses",
"attributes":{
"name":"Статус телефонии в API",
"color":"#000000"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/telephony-statuses"
payload = json.dumps({
"data":{
"type":"telephony-statuses",
"attributes":{
"name":"Статус телефонии в API",
"color":"#000000"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/telephony-statuses'));
request.body = json.encode({
"data":{
"type":"telephony-statuses",
"attributes":{
"name":"Статус телефонии в API",
"color":"#000000"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | telephony-statuses |
URL | /api/v1/telephony-statuses |
Список | GET /api/v1/telephony-statuses |
Чтение | GET /api/v1/telephony-statuses/{id} |
Создание | POST /api/v1/telephony-statuses |
Редактирование | PATCH /api/v1/telephony-statuses/{id} |
Удаление | DELETE /api/v1/telephony-statuses/{id} |
Атрибуты
Атрибуты статусов
{
"data": {
"type":"telephony-statuses",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Мой статус телефонии",
"color": "#1f2f3f"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Мой статус телефонии | да | Имя статуса телефонии |
color | string |
#1f2f3f | да | Цвет статуса телефонии |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список статусов звонков созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/telephony-statuses" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/telephony-statuses?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/telephony-statuses?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/telephony-statuses?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/telephony-statuses?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/telephony-statuses?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/telephony-statuses?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести статусы телефонии созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести статусы телефонии созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести статусы телефонии обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести статусы телефонии обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Telephony engine
Интеграция подойдет тем, кто готов самостоятельно реализовать отправку данных (со своего сервера телефонии) о звонках в Synergy CRM и обработку запросов на заказ звонка от Synergy CRM.
Подключение на стороне Synergy CRM
В настройках системы, в подразделе "Интеграции" выбираем интеграцию, "Synergy API", далее в появившемся окне указываем: - адрес заказа звонка (например https://my_telephony_host.ru/order/call)
После сохранения формы, в блоке с телефониями появится ваша интеграция.
Кликнув вашей телефонии, отобразится модальное окно, в котором будет указан URL
уведомлений
(вида https://telephony.app.synergycrm.ru/telephony_external…),
на который необходимо будет отправлять POST
запросом информацию о звонках.
Так же в этом окне необходимо будет указать каким сотрудникам какие внутренние номера соответствуют.
Заказ звонка из Synergy CRM
После того, как пользователям будут присвоены внут. номера, то любое нажатие на номер контакта/компании
будет вызывать popover-окно, где можно будет инициировать заказ звонка.
Технически в этот момент произойдет отправка POST
-запроса на URL
который указан в первом пункте, в теле POST
-запроса будут указаны:
{
src_phone: '200',
dst_phone: '79876543211',
signature*: 'dac5f5967202b4cf6a0e075f4b9db3ce'
}
Сиситема Synergy CRM ожидает, также, обычный
POST
запрос:
curl "https://telephony.app.synergycrm.ru/telephony_external/6693d051-1111-2222-3333-000000000000" \
-X POST \ -H "Content-Type: application/x-www-form-urlencoded" \
-d @- << EOF src_number=200&started_at=2022-02-22T12:22:22+03:00&answered_at=2022-02-22T12:22:22+03:00&completed_at=2022-02-22T12:22:22+03:00&direction=outgoing&dst_number=79876543211&duration=20&status=answered&call_id=123456789
Расчет поля signature
был выполнен методом MD5 от строки: dst_phone79876543211src_phone200TOKEN
В качестве ответа на запрос, ожидается получение 200
серверного статуса.
При многократном (5 попыток) получении статуса отличного от 200
, интеграция клиента
в Synergy CRM переводится из активного, в неактивный режим и указывается причина.
Signature
поле заполняется только в случае, когда в настройках интеграции выставлен флаг "Проверка данных".
Уведомления о звонках из АТС в Synergy CRM
Для доставки информации о звонках в Synergy CRM необходимо на выданный URL
(см 1 пункт) отправлять POST
запросом следующие атрибуты звонка:
Атрибут | Ключ | Пример | Запись |
---|---|---|---|
Номер звонящего* | src_phone |
200 |
- |
Номер принимающего* | dst_phone |
79876543211 |
- |
Направление* | direction |
outgoing |
outgoing - исходящий;incoming - входящий;internal - внутренний;planned - запланированный;undefined - не определен |
ID звонка* | call_id |
MjUyNjE1MzM1NTozNji= |
Любая уникальная строка до 255 символов |
Длительность | duration |
2000 |
Количество секунд |
Время начала звонка | started_at |
2022-02-22T12:22:22.222+03:00 |
Формат iso8601 |
Время ответа на звонок | answered_at |
2022-02-22T12:22:22.222+03:00 |
Формат iso8601 |
Время завершения звонка | completed_at |
2022-02-22T12:22:22.222+03:00 |
Формат iso8601 |
Статус звонка | status |
answered |
answered - отвечен;busy - занято;no_answer - нет ответа;cancel - вызов сброшен;undefined - не определен |
Ссылка на аудиозапись | record |
https://host/audio.mp3 |
- |
* Обязательные поля Уточнение по обязательным полям, в зависимости от направления звонка
Обязательные поля в зависимотси от направления звонка
Направление | Обязательные поля | Описание |
---|---|---|
outgoing |
src_phone |
Исходящий звонок |
incoming |
dst_phone |
Входящий звонок |
internal |
src_phone && dst_phone |
Внутренний звонок |
planned |
dst_phone |
Плановый звонок |
error |
src_phone && dst_phone |
Ошибка |
Сценарии доставки уведомлений
Сценарий доставки уведомлений может быть двух видов: 1. Отправка уведомлений по мере их инициализации на сервере телефонии.
Например, как только поступил входящий звонок, то формируется запрос в котором указаны:
src_phone=79876543211
, dst_phone=200
и started_at=2022-02-22T12:22:22.222+03:00
, call_id=MasOIEqwe1aq
Далее, как только была поднята трубка, то отправляется ещё один запрос с дополненными атрибутами:
src_phone=79876543211
, dst_phone=200
, started_at=2022-02-22T12:22:22.222+03:00
, call_id=MasOIEqwe1aq
, status=answered
, answered_at=2022-02-22T12:22:22.222+03:00
.
Далее, звонок был завершен, повторяем отправку с новой информацией:
src_phone=79876543211
, dst_phone=200
, started_at=2022-02-22T12:22:22.222+03:00
, call_id=MasOIEqwe1aq
, status=answered
, answered_at=2022-02-22T12:22:22.222+03:00
, completed_at=2022-02-22T12:22:22.222+03:00
, duration=2000
, recording=https://host/audio.mp3
.
Не забываем, что каждый запрос должен содержать рассчитанный хэш в поле signature
(только если опция проверки данных включена в настройках интеграции).
- Отправка уведомлений (один звонок == одно уведомление).
По окончанию звонка или по таймауту сервер телефонии делает отправку истории звонков. В момент обработки уведомлений на стороне Synergy CRM происходит следующее:
- Принимается
POST
запрос, инициализируются обработчики интеграции клиента - Проверяется валидность и значение поля
signature
- Создается звонок
- Если звонок входящий, то пользователям, находящимся в онлайне, отображается тостер (окно в нижнем правом углу) в котором перечислены ссылки на компании и контакты, которые имеют этот же самый номер, что и в звонке. Далее, если пользователь нажмет на гиперссылку, то откроется миникарточка объекта.
- Формируется ответ SynergyCRM в ответ на
POST
запрос отвечает200
серверным статусом, а так же в теле ответа содержится json с информацией по созданному объекту звонка.
Дополнение: Синхронный ответ с телом объекта, в ближайшее время будет заменен на ID звонка в очереди обработки звонков, узнать о статусе обработки можно будет воспользовавшись методами https://api.synergycrm.ru/#telephony_calls.
Правило расчета подписи (signature
)
Целостность запросов как в случае с заказом звонка, так и в случае с уведомлениями
можно проверить по хэшу в поле signature
. Для этого необходимо сгенерировать хэш алгоритмом md5 от строки параметров и значений,
отсортированной в алфавитном порядке по имени ключа и добавленным токеном в конец этой строки.
Исходные параметры:
{
dst_phone: '222',
src_phone: '200',
direction: 'internal',
duration: '2000',
started_at: '2022-02-22T12:22:22.222+03:00'
}
Сортируем в алфавитном порядке по ключу:
{
dst_phone: '222',
src_phone: '200',
direction: 'internal',
duration: '2000',
started_at: '2022-02-22T12:22:22.222+03:00'
}
Преобразуем в строку и добавим в конец токен:
directioninternaldst_phone222duration2000src_phone200started_at2022-02-22T12:22:22 .222+03:00TOKEN
Генерируем от полученной строки хэш: 4655a2c26466969e1c73f5ed4a8df503
Продукты
Создание продукта с предустановленными типом и статусом
curl "https://app.synergycrm.ru/api/v1/products" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"products",
"attributes":{
"name":"Продукт по API",
"description":"Продукт созданный при помощи API",
"purchase-price":20000.0
},
"relationships":{
"product-type":{
"data":{
"type":"product-types",
"id":"22"
}
},
"status":{
"data":{
"type":"product-statuses",
"id":"2"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/products");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"products\",\"attributes\":{\"name\":\"Продукт по API\",\"description\":\"Продукт созданный при помощи API\",\"purchase-price\":20000.0},\"relationships\":{\"product-type\":{\"data\":{\"type\":\"product-types\",\"id\":\"22\"}},\"status\":{\"data\":{\"type\":\"product-statuses\",\"id\":\"2\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/products')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"products",
"attributes":{
"name":"Продукт по API",
"description":"Продукт созданный при помощи API",
"purchase-price":20000.0
},
"relationships":{
"product-type":{
"data":{
"type":"product-types",
"id":"22"
}
},
"status":{
"data":{
"type":"product-statuses",
"id":"2"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"products",
"attributes":{
"name":"Продукт по API",
"description":"Продукт созданный при помощи API",
"purchase-price":20000.0
},
"relationships":{
"product-type":{
"data":{
"type":"product-types",
"id":"22"
}
},
"status":{
"data":{
"type":"product-statuses",
"id":"2"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/products", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/products',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"products",
"attributes":{
"name":"Продукт по API",
"description":"Продукт созданный при помощи API",
"purchase-price":20000.0
},
"relationships":{
"product-type":{
"data":{
"type":"product-types",
"id":"22"
}
},
"status":{
"data":{
"type":"product-statuses",
"id":"2"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/products"
payload = json.dumps({
"data":{
"type":"products",
"attributes":{
"name":"Продукт по API",
"description":"Продукт созданный при помощи API",
"purchase-price":20000.0
},
"relationships":{
"product-type":{
"data":{
"type":"product-types",
"id":"22"
}
},
"status":{
"data":{
"type":"product-statuses",
"id":"2"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/products'));
request.body = json.encode({
"data":{
"type":"products",
"attributes":{
"name":"Продукт по API",
"description":"Продукт созданный при помощи API",
"purchase-price":20000.0
},
"relationships":{
"product-type":{
"data":{
"type":"product-types",
"id":"22"
}
},
"status":{
"data":{
"type":"product-statuses",
"id":"2"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Пример установки обложки.
curl "https://app.synergycrm.ru/api/v1/products/10" \
-X PATCH \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"products",
"id":"22",
"relationships":{
"cover":{
"data":{
"type":"documents",
"id":"222"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/products/10");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("PATCH");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"products\",\"id\":\"22\",\"relationships\":{\"cover\":{\"data\":{\"type\":\"documents\",\"id\":\"222\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/products/10')
req = Net::HTTP::Patch.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"products",
"id":"22",
"relationships":{
"cover":{
"data":{
"type":"documents",
"id":"222"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"products",
"id":"22",
"relationships":{
"cover":{
"data":{
"type":"documents",
"id":"222"
}
}
}
}
}`)
req, err := http.NewRequest("PATCH", "https://app.synergycrm.ru/api/v1/products/10", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/products/10',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"products",
"id":"22",
"relationships":{
"cover":{
"data":{
"type":"documents",
"id":"222"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/products/10"
payload = json.dumps({
"data":{
"type":"products",
"id":"22",
"relationships":{
"cover":{
"data":{
"type":"documents",
"id":"222"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/products/10'));
request.body = json.encode({
"data":{
"type":"products",
"id":"22",
"relationships":{
"cover":{
"data":{
"type":"documents",
"id":"222"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | products |
URL | /api/v1/products |
Список | GET /api/v1/products |
Чтение | GET /api/v1/products/{id} |
Создание | POST /api/v1/products |
Редактирование | PATCH /api/v1/products/{id} |
Удаление | DELETE /api/v1/products/{id} |
Атрибуты
Атрибуты продукта
{
"data": {
"type":"products",
"id": 2,
"attributes":{
"name": "Мое название продукта",
"description": "Мое описание продукта",
"cost-price": 200.0,
"selling-price": 200.0,
"purchase-price": 20.0,
"code": "10110",
"number": 2,
"vendor-code": "1BM40",
"is-service": false,
"cover-image": "https://example.com/path/to/file.jpg",
"customs":{
"custom-943":"2022-02-22T12:02:22.222+03:00"
},
"created-at":"2022-02-22T12:02:22.222+03:00",
"updated-at":"2022-02-22T12:02:22.222+03:00"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Мое название продукта | да | Название товара |
description | string |
Мое описание продукта | да | Описание товара |
code | string |
11030 | да | Код |
vendor-code | string |
1BM40 | да | Артикул |
is-service | boolean |
true |
да | Услуга |
purchase-price | decimal |
20.0 | да | Цена закупки |
cost-price | decimal |
200.0 | нет | Себестоимость |
selling-price | decimal |
200.0 | да | Цена продажи |
customs | hash |
{"custom-1":'custom value'} |
да | Свои поля |
created-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:02:22.222+03:00 |
нет | Дата обновления |
discarded-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата перемещения в корзину |
cover-image | string |
https://example.com/path/to/file.jpg |
нет | Обложка.** |
volume | decimal |
2.0 | да | Объём |
weight | decimal |
20.0 | да | Вес, кг |
ccd | string |
11111111 / 111111 / 1111111 |
да | ГТД |
country | string |
Россия | да | Страна |
vat | decimal |
20.0 | да | НДС |
number | bigint |
2 | да | Номер продукта |
* Обязательные поля ** Обложка может быть установлена только из тех документов, которые уже связаны с продуктом и являются изображением.
Связи
Пример данных (перечислены не все связи)
{
"data": {
"type":"products",
"id":"2",
"relationships":{
"status":{
"links":{
"self":"/api/v1/products/2/relationships/status",
"related":"/api/v1/products/2/status"
}
},
"category":{
"links":{
"self":"/api/v1/products/2/relationships/category",
"related":"/api/v1/products/2/category"
}
}
}
}
}
Пример запроса с загруженными статусами и категориями продуктов
curl "https://app.synergycrm.ru/api/v1/products?include=status,category" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/products?include=status,category");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/products?include=status,category')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/products?include=status,category", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/products?include=status,category',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/products?include=status,category"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/products?include=status,category'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Получить продукты по связанным реквизитам юридического лица аккаунта (org-detail)
curl -G "http://app.synergycrm.ru/api/v1/products?filter[org-detail-id]=2" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token"
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Категория | category | product-categories |
Статус | status | product-statuses |
Скидка | discount | product-discounts |
Единица измерения | unit | product-units |
Склад | store | stores |
Задачи | diaries | diaries |
Заявки | orders | orders |
Сделки | deals | deals |
Изображения | images | documents |
Обложка | cover | documents |
Документы | documents | documents |
Ответственная организация | org-detail | org-details |
Фильтры
Получить список продуктов по определённому контакту
curl -G "https://app.synergycrm.ru/api/v1/products/?filter[contacts]=2" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/products/?filter[contacts]=2");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/products/?filter[contacts]=2')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/products/?filter[contacts]=2", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/products/?filter[contacts]=2',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/products/?filter[contacts]=2"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/products/?filter[contacts]=2'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
contacts | Вывести продукты по определенному contacts |
filter[contacts]=2 |
companies | Вывести продукты по определенному companies |
filter[companies]=2 |
deals | Вывести продукты по определенному deals |
filter[deals]=2 |
orders | Вывести продукты по определенному orders |
filter[orders]=2 |
diaries | Вывести продукты по определенному diaries |
filter[diaries]=2 |
record-objects | Вывести продукты по определенному record-objects |
filter[record-objects]=2 |
created-at-gte | Вывести продукты созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести продукты созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести продукты обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести продукты обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
code | Вывести продукты по определенному code |
filter[code]=Q123 |
q | Вывести продукты по поисковому запросу | filter[q]=some-query |
archived | Вывести продукты в архиве | filter[archived]=2 |
discarded | Вывести продукты в корзине | filter[discarded]=2 |
actual | Вывести актуальные продукты | filter[actual]=2 |
discarded-at-null | Вывести продукты не в корзине | filter[discarded-at-null]=true |
org-details | Вывести продукты по связанным реквизитам аккаунта org-detail-id |
filter[org-detail-id]=2 |
Категории продуктов
Создание новой категории продуктов
curl "https://app.synergycrm.ru/api/v1/product-categories" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"product-categories",
"attributes":{
"name":"Категория в API"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/product-categories");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"product-categories\",\"attributes\":{\"name\":\"Категория в API\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/product-categories')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"product-categories",
"attributes":{
"name":"Категория в API"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"product-categories",
"attributes":{
"name":"Категория в API"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/product-categories", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/product-categories',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"product-categories",
"attributes":{
"name":"Категория в API"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/product-categories"
payload = json.dumps({
"data":{
"type":"product-categories",
"attributes":{
"name":"Категория в API"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/product-categories'));
request.body = json.encode({
"data":{
"type":"product-categories",
"attributes":{
"name":"Категория в API"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | product-categories |
URL | /api/v1/product-categories |
Список | GET /api/v1/product-categories |
Чтение | GET /api/v1/product-categories/{id} |
Создание | POST /api/v1/product-categories |
Редактирование | PATCH /api/v1/product-categories/{id} |
Удаление | DELETE /api/v1/product-categories/{id} |
Атрибуты
Атрибуты категории продукта
{
"data": {
"type":"product-categories",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Моя категория продуктов"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Моя категория продуктов | да | Название категории продукта |
ancestry | string |
112,12 |
нет | Список родительских категорий |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Вложенные категории продуктов
Пример данных для создания подкатегории
{
"data": {
"type":"product-categories",
"attributes":{
"name":"Моя подкатегория"
},
"relationships":{
"parent":{
"data":{
"type":"product-categories",
"id":"2"
}
}
}
}
}
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Родитель | parent | product-categories |
Дети | children | product-categories |
Дерево | subtree | product-categories |
Фильтры
Получить список категорий продуктов созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/product-categories" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/product-categories?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/product-categories?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/product-categories?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/product-categories?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/product-categories?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/product-categories?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести категории созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести категории созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести категории обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести категории обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Скидки
Создание новой скидки
curl "https://app.synergycrm.ru/api/v1/product-discounts" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"product-discounts",
"attributes":{
"name":"Скидка в API",
"size":20.0
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/product-discounts");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"product-discounts\",\"attributes\":{\"name\":\"Скидка в API\",\"size\":20.0}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/product-discounts')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"product-discounts",
"attributes":{
"name":"Скидка в API",
"size":20.0
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"product-discounts",
"attributes":{
"name":"Скидка в API",
"size":20.0
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/product-discounts", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/product-discounts',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"product-discounts",
"attributes":{
"name":"Скидка в API",
"size":20.0
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/product-discounts"
payload = json.dumps({
"data":{
"type":"product-discounts",
"attributes":{
"name":"Скидка в API",
"size":20.0
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/product-discounts'));
request.body = json.encode({
"data":{
"type":"product-discounts",
"attributes":{
"name":"Скидка в API",
"size":20.0
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | product-discounts |
URL | /api/v1/product-discounts |
Список | GET /api/v1/product-discounts |
Чтение | GET /api/v1/product-discounts/{id} |
Создание | POST /api/v1/product-discounts |
Редактирование | PATCH /api/v1/product-discounts/{id} |
Удаление | DELETE /api/v1/product-discounts/{id} |
Атрибуты
Атрибуты скидки продукта
{
"data": {
"type":"product-discounts",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Моя скидка",
"size": "20.0"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Моя скидка | да | Название скидки |
size* | float |
20.0 | да | Размер скидки |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Связи
Пример запроса с загруженными типами контактов
curl "https://app.synergycrm.ru/api/v1/product-discounts?include=contact-type" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/product-discounts?include=contact-type");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/product-discounts')
params = {
:include => 'contact-type',
}
uri.query = URI.encode_www_form(params)
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/product-discounts?include=contact-type", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/product-discounts?include=contact-type',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/product-discounts?include=contact-type"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/product-discounts?include=contact-type'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Тип контакта | contact-type | contact-types |
Фильтры
Получить список скидок созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/product-discounts" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/product-discounts?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/product-discounts?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/product-discounts?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/product-discounts?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/product-discounts?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/product-discounts?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести скидки созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести скидки созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести скидки обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести скидки обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Промокампании
Создание промокампании
curl "https://app.synergycrm.ru/api/v1/promo-campaigns" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"promo-campaigns",
"attributes":{
"name": "Promo 2022",
"start-at": "2022-02-22 00:00 +0300"
"due-date": "2022-02-22 23:59 +0300"
"discount": 20.0,
"discount-mode": "percent",
"default": false
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/promo-campaigns");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"promo-campaigns\",\"attributes\":{\"name\": \"Promo 2022\",\"start-at\": \"2022-02-22 00:00 +0300\"\"due-date\": \"2022-02-22 23:59 +0300\"\"discount\": 20.0,\"discount-mode\": \"percent\",\"default\": false}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/promo-campaigns')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"promo-campaigns",
"attributes":{
"name": "Promo 2022",
"start-at": "2022-02-22 00:00 +0300"
"due-date": "2022-02-22 23:59 +0300"
"discount": 20.0,
"discount-mode": "percent",
"default": false
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"promo-campaigns",
"attributes":{
"name": "Promo 2022",
"start-at": "2022-02-22 00:00 +0300"
"due-date": "2022-02-22 23:59 +0300"
"discount": 20.0,
"discount-mode": "percent",
"default": false
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/promo-campaigns", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/promo-campaigns',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"promo-campaigns",
"attributes":{
"name": "Promo 2022",
"start-at": "2022-02-22 00:00 +0300"
"due-date": "2022-02-22 23:59 +0300"
"discount": 20.0,
"discount-mode": "percent",
"default": false
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/promo-campaigns"
payload = json.dumps({
"data":{
"type":"promo-campaigns",
"attributes":{
"name": "Promo 2022",
"start-at": "2022-02-22 00:00 +0300"
"due-date": "2022-02-22 23:59 +0300"
"discount": 20.0,
"discount-mode": "percent",
"default": false
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/promo-campaigns'));
request.body = json.encode({
"data":{
"type":"promo-campaigns",
"attributes":{
"name": "Promo 2022",
"start-at": "2022-02-22 00:00 +0300"
"due-date": "2022-02-22 23:59 +0300"
"discount": 20.0,
"discount-mode": "percent",
"default": false
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | promo-campaigns |
URL | /api/v1/promo-campaigns |
Список | GET /api/v1/promo-campaigns |
Чтение | GET /api/v1/promo-campaigns/{id} |
Создание | POST /api/v1/promo-campaigns |
Редактирование | PATCH /api/v1/promo-campaigns/{id} |
Удаление | DELETE /api/v1/promo-campaigns/{id} |
Атрибуты
Атрибуты промо-компании
{
"data": {
"type":"promo-campaigns",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Promo 2022",
"start-at": "2022-02-22 00:00 +0300",
"due-date": "2022-02-22 23:59 +0300",
"discount": 20.0,
"discount-mode": "percent",
"default": false,
"exclude-product-ids": ["1", "2"]
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Promo 2022 | да | Название промокампании |
start-at* | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата и время начала действия |
due-date | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата и время окончания действия |
discount | float |
20.0 | да | Размер скидки |
discount-mode | string |
percent | да | Тип скидки: percent (процент) или fixed (фикс. сумма) |
default | boolean |
true | да | Определяет, является ли промокампания используемой по умолчанию |
exclude-product-ids | array |
["1", "2"] | да | Идентификаторы продуктов, на которые не действует скидка |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список скидок созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/promo-campaigns" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/promo-campaigns?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/promo-campaigns?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/promo-campaigns?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/promo-campaigns?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/promo-campaigns?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/promo-campaigns?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести промо-компании созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести промо-компании созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести промо-компании обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести промо-компании обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Промокоды
Создание промокода c лимитом в 22 использования
curl "https://app.synergycrm.ru/api/v1/promocodes" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"promocodes",
"attributes":{
"name":"PROMO2022",
"uses-limit": 22,
},
"relationships":{
"promo-campaign":{
"data":{
"type": "promo-campaigns",
"id": "2"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/promocodes");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"promocodes\",\"attributes\":{\"name\":\"PROMO2022\",\"uses-limit\": 22,},\"relationships\":{\"promo-campaign\":{\"data\":{\"type\": \"promo-campaigns\",\"id\": \"2\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/promocodes')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"promocodes",
"attributes":{
"name":"PROMO2022",
"uses-limit": 22,
},
"relationships":{
"promo-campaign":{
"data":{
"type": "promo-campaigns",
"id": "2"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"promocodes",
"attributes":{
"name":"PROMO2022",
"uses-limit": 22,
},
"relationships":{
"promo-campaign":{
"data":{
"type": "promo-campaigns",
"id": "2"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/promocodes", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/promocodes',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"promocodes",
"attributes":{
"name":"PROMO2022",
"uses-limit": 22,
},
"relationships":{
"promo-campaign":{
"data":{
"type": "promo-campaigns",
"id": "2"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/promocodes"
payload = json.dumps({
"data":{
"type":"promocodes",
"attributes":{
"name":"PROMO2022",
"uses-limit": 22,
},
"relationships":{
"promo-campaign":{
"data":{
"type": "promo-campaigns",
"id": "2"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/promocodes'));
request.body = json.encode({
"data":{
"type":"promocodes",
"attributes":{
"name":"PROMO2022",
"uses-limit": 22,
},
"relationships":{
"promo-campaign":{
"data":{
"type": "promo-campaigns",
"id": "2"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | promocodes |
URL | /api/v1/promocodes |
Список | GET /api/v1/promocodes |
Чтение | GET /api/v1/promocodes/{id} |
Создание | POST /api/v1/promocodes |
Редактирование | PATCH /api/v1/promocodes/{id} |
Удаление | DELETE /api/v1/promocodes/{id} |
Атрибуты
Атрибуты промокода
{
"data": {
"type":"promocodes",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "PROMO2022",
"uses-limit": 22,
"active": false
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
PROMO2022 | да | Промокод |
uses-limit | integer |
22 | да | Лимит использования |
active | boolean |
false | да | Активность промокода |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список промокодов, созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/promocodes" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/promocodes?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/promocodes?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/promocodes?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/promocodes?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/promocodes?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/promocodes?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести промокоды созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести промокоды созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести промокоды обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести промокоды обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Скидки промокампании
Создание скидки промокампании
curl "https://app.synergycrm.ru/api/v1/promo-campaign-discounts" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"promo-campaign-discounts",
"attributes":{
"product-ids": ["1", "2"],
"exclude-product-ids": ["1", "2"],
"discount": 20.0,
"discount-mode": "percent"
},
"relationships":{
"promo-campaign":{
"data":{
"type": "promo-campaigns",
"id": "2"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/promo-campaign-discounts");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"promo-campaign-discounts\",\"attributes\":{\"product-ids\": [\"1\", \"2\"],\"exclude-product-ids\": [\"1\", \"2\"],\"discount\": 20.0,\"discount-mode\": \"percent\"},\"relationships\":{\"promo-campaign\":{\"data\":{\"type\": \"promo-campaigns\",\"id\": \"2\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/promo-campaign-discounts')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"promo-campaign-discounts",
"attributes":{
"product-ids": ["1", "2"],
"exclude-product-ids": ["1", "2"],
"discount": 20.0,
"discount-mode": "percent"
},
"relationships":{
"promo-campaign":{
"data":{
"type": "promo-campaigns",
"id": "2"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"promo-campaign-discounts",
"attributes":{
"product-ids": ["1", "2"],
"exclude-product-ids": ["1", "2"],
"discount": 20.0,
"discount-mode": "percent"
},
"relationships":{
"promo-campaign":{
"data":{
"type": "promo-campaigns",
"id": "2"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/promo-campaign-discounts", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/promo-campaign-discounts',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"promo-campaign-discounts",
"attributes":{
"product-ids": ["1", "2"],
"exclude-product-ids": ["1", "2"],
"discount": 20.0,
"discount-mode": "percent"
},
"relationships":{
"promo-campaign":{
"data":{
"type": "promo-campaigns",
"id": "2"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/promo-campaign-discounts"
payload = json.dumps({
"data":{
"type":"promo-campaign-discounts",
"attributes":{
"product-ids": ["1", "2"],
"exclude-product-ids": ["1", "2"],
"discount": 20.0,
"discount-mode": "percent"
},
"relationships":{
"promo-campaign":{
"data":{
"type": "promo-campaigns",
"id": "2"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/promo-campaign-discounts'));
request.body = json.encode({
"data":{
"type":"promo-campaign-discounts",
"attributes":{
"product-ids": ["1", "2"],
"exclude-product-ids": ["1", "2"],
"discount": 20.0,
"discount-mode": "percent"
},
"relationships":{
"promo-campaign":{
"data":{
"type": "promo-campaigns",
"id": "2"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | promo-campaign-discounts |
URL | /api/v1/promo-campaign-discounts |
Список | GET /api/v1/promo-campaign-discounts |
Чтение | GET /api/v1/promo-campaign-discounts/{id} |
Создание | POST /api/v1/promo-campaign-discounts |
Редактирование | PATCH /api/v1/promo-campaign-discounts/{id} |
Удаление | DELETE /api/v1/promo-campaign-discounts/{id} |
Атрибуты
Атрибуты скидки в промо-компании
{
"data": {
"type":"promo-campaign-discounts",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"product-ids": ["1", "2"],
"exclude-product-ids": ["1", "2"],
"discount": 20.0,
"discount-mode": "percent"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
product-ids | array |
["1", "2"] | да | Идентификаторы продуктов |
exclude-product-ids | array |
["1", "2"] | да | Идентификаторы продуктов, на которые не действует скидка |
discount* | float |
20.0 | да | Размер скидки |
discount-mode* | string |
percent | да | Тип скидки: percent (процент) или fixed (фикс. сумма) |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список объектов, созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/promo-campaign-discounts" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/promo-campaign-discounts?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/promo-campaign-discounts?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/promo-campaign-discounts?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/promo-campaign-discounts?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/promo-campaign-discounts?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/promo-campaign-discounts?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести скидки созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести скидки созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести скидки обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести скидки обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Статусы продуктов
Создание статуса продукта
curl "https://app.synergycrm.ru/api/v1/product-statuses" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"product-statuses",
"attributes":{
"name":"Статус заявки в API",
"color":"#000000"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/product-statuses");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"product-statuses\",\"attributes\":{\"name\":\"Статус заявки в API\",\"color\":\"#000000\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/product-statuses')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"product-statuses",
"attributes":{
"name":"Статус заявки в API",
"color":"#000000"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"product-statuses",
"attributes":{
"name":"Статус заявки в API",
"color":"#000000"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/product-statuses", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/product-statuses',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"product-statuses",
"attributes":{
"name":"Статус заявки в API",
"color":"#000000"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/product-statuses"
payload = json.dumps({
"data":{
"type":"product-statuses",
"attributes":{
"name":"Статус заявки в API",
"color":"#000000"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/product-statuses'));
request.body = json.encode({
"data":{
"type":"product-statuses",
"attributes":{
"name":"Статус заявки в API",
"color":"#000000"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | product-statuses |
URL | /api/v1/product-statuses |
Список | GET /api/v1/product-statuses |
Чтение | GET /api/v1/product-statuses/{id} |
Создание | POST /api/v1/product-statuses |
Редактирование | PATCH /api/v1/product-statuses/{id} |
Удаление | DELETE /api/v1/product-statuses/{id} |
Атрибуты
Атрибуты статуса продукта
{
"data": {
"type":"product-statuses",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Мой статус продукта",
"color": "#1f2f3f"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Мой статус продукта | да | Имя статуса продукта |
color | string |
#1f2f3f | да | Цвет статуса продукта |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список статусов продуктов созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/product-statuses" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/product-statuses?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/product-statuses?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/product-statuses?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/product-statuses?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/product-statuses?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/product-statuses?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести статусы продуктов созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести статусы продуктов созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести статусы продуктов обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести статусы продуктов обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Типы продуктов
Создание типа продуктов
curl "https://app.synergycrm.ru/api/v1/product-types" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"product-types",
"attributes":{
"name":"Тип продукта в API"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/product-types");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"product-types\",\"attributes\":{\"name\":\"Тип продукта в API\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/product-types')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"product-types",
"attributes":{
"name":"Тип продукта в API"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"product-types",
"attributes":{
"name":"Тип продукта в API"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/product-types", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/product-types',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"product-types",
"attributes":{
"name":"Тип продукта в API"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/product-types"
payload = json.dumps({
"data":{
"type":"product-types",
"attributes":{
"name":"Тип продукта в API"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/product-types'));
request.body = json.encode({
"data":{
"type":"product-types",
"attributes":{
"name":"Тип продукта в API"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | product-types |
URL | /api/v1/product-types |
Список | GET /api/v1/product-types |
Чтение | GET /api/v1/product-types/{id} |
Создание | POST /api/v1/product-types |
Редактирование | PATCH /api/v1/product-types/{id} |
Удаление | DELETE /api/v1/product-types/{id} |
Атрибуты
Атрибуты типа продукта
{
"data": {
"type":"product-types",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Мой тип продукта"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Мой тип продукта | да | Название типа продукта |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список единиц измерений продуктов созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/product-types" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/product-types?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/product-types?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/product-types?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/product-types?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/product-types?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/product-types?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести типы продуктов, созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести типы продуктов, созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести типы продуктов, обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести типы продуктов, обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Единицы измерений
Создание новой единицы измерения
curl "https://app.synergycrm.ru/api/v1/product-units" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"product-units",
"attributes":{
"name":"Единица измерения в API"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/product-units");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"product-units\",\"attributes\":{\"name\":\"Единица измерения в API\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/product-units')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"product-units",
"attributes":{
"name":"Единица измерения в API"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"product-units",
"attributes":{
"name":"Единица измерения в API"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/product-units", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/product-units',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"product-units",
"attributes":{
"name":"Единица измерения в API"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/product-units"
payload = json.dumps({
"data":{
"type":"product-units",
"attributes":{
"name":"Единица измерения в API"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/product-units'));
request.body = json.encode({
"data":{
"type":"product-units",
"attributes":{
"name":"Единица измерения в API"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | product-units |
URL | /api/v1/product-units |
Список | GET /api/v1/product-units |
Чтение | GET /api/v1/product-units/{id} |
Создание | POST /api/v1/product-units |
Редактирование | PATCH /api/v1/product-units/{id} |
Удаление | DELETE /api/v1/product-units/{id} |
Атрибуты
Атрибуты единицы измерения продукта
{
"data": {
"type":"product-units",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "руб/м2"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Моя единица измерения | да | Название единицы измерения |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список единиц измерений продуктов созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/product-units" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/product-units?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/product-units?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/product-units?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/product-units?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/product-units?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/product-units?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести единицы измерения, созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести единицы измерения, созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести единицы измерения, обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести единицы измерения, обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Вложенные продукты
Добавление продукта в сделку (с промокодом)
curl "https://app.synergycrm.ru/api/v1/entity-products" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"entity-products",
"attributes":{
"quantity": 2
},
"relationships":{
"entity":{
"data":{
"type":"deals",
"id": 2
}
},
"product":{
"data":{
"type":"products",
"id": 2
}
},
"promocodes":{
"data":[{
"type":"promocodes",
"id": 2
}]
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/entity-products");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"entity-products\",\"attributes\":{\"quantity\": 2},\"relationships\":{\"entity\":{\"data\":{\"type\":\"deals\",\"id\": 2}},\"product\":{\"data\":{\"type\":\"products\",\"id\": 2}},\"promocodes\":{\"data\":[{\"type\":\"promocodes\",\"id\": 2}]}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/entity-products')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"entity-products",
"attributes":{
"quantity": 2
},
"relationships":{
"entity":{
"data":{
"type":"deals",
"id": 2
}
},
"product":{
"data":{
"type":"products",
"id": 2
}
},
"promocodes":{
"data":[{
"type":"promocodes",
"id": 2
}]
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"entity-products",
"attributes":{
"quantity": 2
},
"relationships":{
"entity":{
"data":{
"type":"deals",
"id": 2
}
},
"product":{
"data":{
"type":"products",
"id": 2
}
},
"promocodes":{
"data":[{
"type":"promocodes",
"id": 2
}]
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/entity-products", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/entity-products',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"entity-products",
"attributes":{
"quantity": 2
},
"relationships":{
"entity":{
"data":{
"type":"deals",
"id": 2
}
},
"product":{
"data":{
"type":"products",
"id": 2
}
},
"promocodes":{
"data":[{
"type":"promocodes",
"id": 2
}]
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/entity-products"
payload = json.dumps({
"data":{
"type":"entity-products",
"attributes":{
"quantity": 2
},
"relationships":{
"entity":{
"data":{
"type":"deals",
"id": 2
}
},
"product":{
"data":{
"type":"products",
"id": 2
}
},
"promocodes":{
"data":[{
"type":"promocodes",
"id": 2
}]
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/entity-products'));
request.body = json.encode({
"data":{
"type":"entity-products",
"attributes":{
"quantity": 2
},
"relationships":{
"entity":{
"data":{
"type":"deals",
"id": 2
}
},
"product":{
"data":{
"type":"products",
"id": 2
}
},
"promocodes":{
"data":[{
"type":"promocodes",
"id": 2
}]
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Добавление нескольких вложенных продуктов по связи с продуктами у сделки. Из указанных продуктов будут созданы соответствующие вложенные.
curl "https://app.synergycrm.ru/api/v1/deal/2/relationships/products" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":[{
"type":"products",
"id":"2"
}, {
"type":"products",
"id":"2"
}]
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/deal/2/relationships/products");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":[{\"type\":\"products\",\"id\":\"2\"},{\"type\":\"products\",\"id\":\"2\"}]}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/deal/2/relationships/products')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":[{
"type":"products",
"id":"2"
}, {
"type":"products",
"id":"2"
}]
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":[{
"type":"products",
"id":"2"
}, {
"type":"products",
"id":"2"
}]
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/deal/2/relationships/products", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deal/2/relationships/products',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":[{
"type":"products",
"id":"2"
}, {
"type":"products",
"id":"2"
}]
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/deal/2/relationships/products"
payload = json.dumps({
"data":[{
"type":"products",
"id":"2"
}, {
"type":"products",
"id":"2"
}]
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/deal/2/relationships/products'));
request.body = json.encode({
"data":[{
"type":"products",
"id":"2"
}, {
"type":"products",
"id":"2"
}]
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Изменение количества продуктов в сделке
curl "https://app.synergycrm.ru/api/v1/entity-products/1/" \
-X PATCH \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"entity-products",
"attributes":{
"quantity":2
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/entity-products/1/");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("PATCH");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"entity-products\",\"attributes\":{\"quantity\":2}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/entity-products/1/')
req = Net::HTTP::Patch.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"entity-products",
"attributes":{
"quantity":2
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"entity-products",
"attributes":{
"quantity":2
}
}
}`)
req, err := http.NewRequest("PATCH", "https://app.synergycrm.ru/api/v1/entity-products/1/", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/entity-products/1/',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"entity-products",
"attributes":{
"quantity":2
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/entity-products/1/"
payload = json.dumps({
"data":{
"type":"entity-products",
"attributes":{
"quantity":2
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/entity-products/1/'));
request.body = json.encode({
"data":{
"type":"entity-products",
"attributes":{
"quantity":2
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | entity-products |
URL | /api/v1/entity-products |
Список | GET /api/v1/entity-products |
Чтение | GET /api/v1/entity-products/{id} |
Создание | POST /api/v1/entity-products |
Редактирование | PATCH /api/v1/entity-products/{id} |
Удаление | DELETE /api/v1/entity-products/{id} |
Связи
Пример данных
{
"data": {
"type":"products",
"id":"2",
"relationships":{
"entity":{
"links":{
"self":"/api/v1/entity-products/2/relationships/entity",
"related":"/api/v1/entity-products/2/entity"
}
},
"product":{
"links":{
"self":"/api/v1/entity-products/2/relationships/product",
"related":"/api/v1/entity-products/2/product"
}
},
"product-unit":{
"links":{
"self":"/api/v1/entity-products/2/relationships/product-unit",
"related":"/api/v1/entity-products/2/product-unit"
}
}
}
}
}
Пример запроса с загруженным объектом
curl "https://app.synergycrm.ru/api/v1/entity-products??filter[entity-id]=11&filter[entity-type]=deals&include=entity" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/entity-products??filter[entity-id]=11&filter[entity-type]=deals&include=entity");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/entity-products??filter[entity-id]=11&filter[entity-type]=deals&include=entity')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/entity-products??filter[entity-id]=11&filter[entity-type]=deals&include=entity", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/entity-products??filter[entity-id]=11&filter[entity-type]=deals&include=entity',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/entity-products??filter[entity-id]=11&filter[entity-type]=deals&include=entity"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/entity-products??filter[entity-id]=11&filter[entity-type]=deals&include=entity'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Единица измерения | unit | product-units |
Объект | entity | [deals](#deals) , [orders](#orders) , [contacts](#contacts) , [companies](#companies) |
Продукт | product | products |
Атрибуты
Атрибуты спецификаций
{
"data": {
"type":"entity-products",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Название вложенного продукта",
"description": null,
"quantity": 2,
"purchase-price": "1000.0",
"total-amount": "2000.0"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name | string |
Мой продукт | нет | Название продукта |
description | string |
Описание моего продукта | да | Описание продукта |
quantity | integer |
2 | да | Количество |
purchase-price | decimal |
200.0 | да | Цена закупочная за один продукт |
selling-price | decimal |
2000.0 | да | Цена продажи за один продукт |
cost-price | decimal |
1800.0 | да | Прибыль за один продукт |
total-amount | decimal |
4000.0 | нет | Конечная цена |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
Фильтры
Получить список вложенных продуктов по определённой сделке
curl -G "https://app.synergycrm.ru/api/v1/entity-products/?filter[entity-id]=2&filter[entity-type]=deals" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token"
Пример на Java
extern crate reqwest;
use reqwest::header;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut headers = header::HeaderMap::new();
headers.insert("Content-Type", "application/vnd.api+json".parse().unwrap());
headers.insert("Authorization", "Bearer api_token".parse().unwrap());
let client = reqwest::blocking::Client::builder()
.redirect(reqwest::redirect::Policy::none())
.build()
.unwrap();
let res = client.get("https://app.synergycrm.ru/api/v1/entity-products/?filter[entity-id]=2&filter[entity-type]=deals")
.headers(headers)
.send()?
.text()?;
println!("{}", res);
Ok(())
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/entity-products/?filter[entity-id]=2&filter[entity-type]=deals')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/entity-products/?filter[entity-id]=2&filter[entity-type]=deals", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/entity-products/?filter[entity-id]=2&filter[entity-type]=deals',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/entity-products/?filter[entity-id]=2&filter[entity-type]=deals"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/entity-products/?filter[entity-id]=2&filter[entity-type]=deals'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
entity-id | Вывести спецификации по определенному entity-id |
filter[entity-id]=2 |
entity-type | Вывести спецификации по определенному entity-type . Допустимые значения: contacts , deals , orders , companies |
filter[entity-type]=contacts |
created-at-gte | Вывести спецификации созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести спецификации созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести спецификации обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести спецификации обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
archived | Вывести спецификации в архиве | filter[archived]=2 |
discarded | Вывести спецификации в корзине | filter[discarded]=2 |
actual | Вывести актуальные спецификации | filter[actual]=2 |
Проекты
Создание проекта
curl "https://app.synergycrm.ru/api/v1/projects" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"projects",
"attributes":{
"name":"Проект из API"
},
"relationships":{
"user":{
"data":{
"type":"users",
"id":"22"
}
},
"contact":{
"data":{
"type":"contacts",
"id":"2"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/projects");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"projects\",\"attributes\":{\"name\":\"Проект из API\"},\"relationships\":{\"user\":{\"data\":{\"type\":\"users\",\"id\":\"22\"}},\"contact\":{\"data\":{\"type\":\"contacts\",\"id\":\"2\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/projects')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"projects",
"attributes":{
"name":"Проект из API"
},
"relationships":{
"user":{
"data":{
"type":"users",
"id":"22"
}
},
"contact":{
"data":{
"type":"contacts",
"id":"2"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"projects",
"attributes":{
"name":"Проект из API"
},
"relationships":{
"user":{
"data":{
"type":"users",
"id":"22"
}
},
"contact":{
"data":{
"type":"contacts",
"id":"2"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/projects", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/projects',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"projects",
"attributes":{
"name":"Проект из API"
},
"relationships":{
"user":{
"data":{
"type":"users",
"id":"22"
}
},
"contact":{
"data":{
"type":"contacts",
"id":"2"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/projects"
payload = json.dumps({
"data":{
"type":"projects",
"attributes":{
"name":"Проект из API"
},
"relationships":{
"user":{
"data":{
"type":"users",
"id":"22"
}
},
"contact":{
"data":{
"type":"contacts",
"id":"2"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/projects'));
request.body = json.encode({
"data":{
"type":"projects",
"attributes":{
"name":"Проект из API"
},
"relationships":{
"user":{
"data":{
"type":"users",
"id":"22"
}
},
"contact":{
"data":{
"type":"contacts",
"id":"2"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Пример установки ответственного.
curl "https://app.synergycrm.ru/api/v1/projects/2" \
-X PATCH \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"projects",
"id":"2",
"relationships":{
"responsible":{
"data":{
"type":"users",
"id":"22"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/projects/2");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("PATCH");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"projects\",\"id\":\"2\",\"relationships\":{\"responsible\":{\"data\":{\"type\":\"users\",\"id\":\"22\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/projects/2')
req = Net::HTTP::Patch.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"projects",
"id":"2",
"relationships":{
"responsible":{
"data":{
"type":"users",
"id":"22"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"projects",
"id":"2",
"relationships":{
"responsible":{
"data":{
"type":"users",
"id":"22"
}
}
}
}
}`)
req, err := http.NewRequest("PATCH", "https://app.synergycrm.ru/api/v1/projects/2", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/projects/2',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"projects",
"id":"2",
"relationships":{
"responsible":{
"data":{
"type":"users",
"id":"22"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/projects/2"
payload = json.dumps({
"data":{
"type":"projects",
"id":"2",
"relationships":{
"responsible":{
"data":{
"type":"users",
"id":"22"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/projects/2'));
request.body = json.encode({
"data":{
"type":"projects",
"id":"2",
"relationships":{
"responsible":{
"data":{
"type":"users",
"id":"22"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | projects |
URL | /api/v1/projects |
Список | GET /api/v1/projects |
Чтение | GET /api/v1/projects/{id} |
Создание | POST /api/v1/projects |
Редактирование | PATCH /api/v1/projects/{id} |
Удаление | DELETE /api/v1/projects/{id} |
Атрибуты
Атрибуты проекта
{
"data": {
"type":"projects",
"id": 2,
"attributes":{
"name": "Проект",
"start-date": "2022-02-22",
"end-date": "2022-12-22",
"discarded-at": null,
"customs":{
"custom-943":"2022-02-22T12:22:22.222+03:00"
},
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Проект | да | Название проекта |
start-date | date |
2022-02-22 |
да | Дата начала |
end-date | date |
2022-12-22 |
да | Дата окончания |
customs | hash |
{"custom-1":'custom value'} |
да | Свои поля |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
discarded-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата перемещения в корзину |
previous-responsible-id | integer |
100 |
нет | Предыдущий ответственный |
* Обязательные поля
Связи
Пример данных (перечислены не все связи)
{
"data": {
"type":"projects",
"id":"2",
"relationships":{
"order":{
"links":{
"self":"/api/v1/projects/2/relationships/order",
"related":"/api/v1/projects/2/order"
}
},
"task-categories":{
"links":{
"self":"/api/v1/projects/2/relationships/task-categories",
"related":"/api/v1/projects/2/task-categories"
}
}
}
}
}
Пример запроса с загруженными статусами и категориями проектов
curl "https://app.synergycrm.ru/api/v1/projects?include=user,responsible" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/projects?include=user,responsible");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/projects?include=user,responsible')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/projects?include=user,responsible", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/projects?include=user,responsible',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/projects?include=user,responsible"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/projects?include=user,responsible'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Создатель | user | users |
Категория | category | project-categories |
Контакт | contact | contacts |
Компания | company | companies |
Сделка | deal | deals |
Ответственный | responsible | users |
Группы задач | task-categories | task-categories |
Задачи | diaries | tasks |
Заявка | order | orders |
Связь проект-участник | projects-users | projects-users |
Участники | users | users |
Фильтры
Получить список проектов по определённому контакту
curl -G "https://app.synergycrm.ru/api/v1/projects/?filter[created-at-gte]=2022.02.22 12:00" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/projects/?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/projects/?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/projects/?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/projects/?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/projects/?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/projects/?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
discarded-at-gte | Вывести проекты в корзине после указанного времени | filter[discarded-at-gte]=2022.02.22 12:00 |
discarded-at-lte | Вывести проекты в корзине до указанного времени | filter[discarded-at-lte]=2022.02.22 12:00 |
created-at-gte | Вывести проекты созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести проекты созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести проекты обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести проекты обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
archived | Вывести проекты в архиве | filter[archived]=2 |
discarded | Вывести проекты в корзине | filter[discarded]=2 |
actual | Вывести актуальные проекты | filter[actual]=2 |
end-date-null | Вывести проекты без дедлайна | filter[discarded-at-null]=true |
discarded-at-null | Вывести проекты не в корзине | filter[discarded-at-null]=true |
Категории проектов
Создание категории проектов
curl "https://app.synergycrm.ru/api/v1/project-categories" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"project-categories",
"attributes":{
"name":"Категория проекта из API"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/project-categories");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"project-categories\",\"attributes\":{\"name\":\"Категория проекта из API\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/project-categories')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"project-categories",
"attributes":{
"name":"Категория проекта из API"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"project-categories",
"attributes":{
"name":"Категория проекта из API"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/project-categories", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/project-categories',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"project-categories",
"attributes":{
"name":"Категория проекта из API"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/project-categories"
payload = json.dumps({
"data":{
"type":"project-categories",
"attributes":{
"name":"Категория проекта из API"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/project-categories'));
request.body = json.encode({
"data":{
"type":"project-categories",
"attributes":{
"name":"Категория проекта из API"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | project-categories |
URL | /api/v1/project-categories |
Список | GET /api/v1/project-categories |
Чтение | GET /api/v1/project-categories/{id} |
Создание | POST /api/v1/project-categories |
Редактирование | PATCH /api/v1/project-categories/{id} |
Удаление | DELETE /api/v1/project-categories/{id} |
Атрибуты
Атрибуты категорий проекта
{
"data": {
"type":"project-categories",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Категория"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Категория | да | Название категории проекта |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список категорий проектов созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/project-categories" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/project-categories?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/project-categories?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/project-categories?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/project-categories?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/project-categories?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/project-categories?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести категории созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести категории созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести категории обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести категории обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Категории задач проектов
Создание категории задач проектов
curl "https://app.synergycrm.ru/api/v1/task-categories" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"task-categories",
"attributes":{
"name":"Категория задач проекта из API"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/task-categories");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"task-categories\",\"attributes\":{\"name\":\"Категория задач проекта из API\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/task-categories')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"task-categories",
"attributes":{
"name":"Категория задач проекта из API"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"task-categories",
"attributes":{
"name":"Категория задач проекта из API"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/task-categories", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/task-categories',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"task-categories",
"attributes":{
"name":"Категория задач проекта из API"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/task-categories"
payload = json.dumps({
"data":{
"type":"task-categories",
"attributes":{
"name":"Категория задач проекта из API"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/task-categories'));
request.body = json.encode({
"data":{
"type":"task-categories",
"attributes":{
"name":"Категория задач проекта из API"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | task-categories |
URL | /api/v1/task-categories |
Список | GET /api/v1/task-categories |
Чтение | GET /api/v1/task-categories/{id} |
Создание | POST /api/v1/task-categories |
Редактирование | PATCH /api/v1/task-categories/{id} |
Удаление | DELETE /api/v1/task-categories/{id} |
Атрибуты
Атрибуты категории задач
{
"data": {
"type":"task-categories",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Категория"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Категория | да | Название категории задач проекта |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список категорий задач проектов созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/task-categories" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/task-categories?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/task-categories?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/task-categories?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/task-categories?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/task-categories?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/task-categories?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести категории задач созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести категории задач созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести категории задач обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести категории задач обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Объекты недвижимости
Создание объекта недвижимости с предустановленными статусом
curl "https://app.synergycrm.ru/api/v1/estate-properties" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"estate-properties",
"attributes":{
"name":"Объект недвижимости по API",
"description":"объект созданный при помощи API",
"purchase-price":20000.0
},
"relationships":{
"status":{
"data":{
"type":"estate-property-statuses",
"id":"2"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/estate-properties");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"estate-properties\",\"attributes\":{\"name\":\"Объект недвижимости по API\",\"description\":\"объект созданный при помощи API\",\"purchase-price\":20000.0},\"relationships\":{\"status\":{\"data\":{\"type\":\"estate-property-statuses\",\"id\":\"2\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/estate-properties')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"estate-properties",
"attributes":{
"name":"Объект недвижимости по API",
"description":"объект созданный при помощи API",
"purchase-price":20000.0
},
"relationships":{
"status":{
"data":{ "type":"estate-property-statuses", "id":"2"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"estate-properties",
"attributes":{
"name":"Объект недвижимости по API",
"description":"объект созданный при помощи API",
"purchase-price":20000.0
},
"relationships":{
"status":{
"data":{ "type":"estate-property-statuses", "id":"2"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/estate-properties", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/estate-properties',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"estate-properties",
"attributes":{
"name":"Объект недвижимости по API",
"description":"объект созданный при помощи API",
"purchase-price":20000.0
},
"relationships":{
"status":{
"data":{
"type":"estate-property-statuses",
"id":"2"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/estate-properties"
payload = json.dumps({
"data":{
"type":"estate-properties",
"attributes":{
"name":"Объект недвижимости по API",
"description":"объект созданный при помощи API",
"purchase-price":20000.0
},
"relationships":{
"status":{
"data":{
"type":"estate-property-statuses",
"id":"2"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/estate-properties'));
request.body = json.encode({
"data":{
"type":"estate-properties",
"attributes":{
"name":"Объект недвижимости по API",
"description":"объект созданный при помощи API",
"purchase-price":20000.0
},
"relationships":{
"status":{
"data":{
"type":"estate-property-statuses",
"id":"2"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Пример установки обложки.
curl "https://app.synergycrm.ru/api/v1/estate-properties/22" \
-X PATCH \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"estate-properties",
"id":"22",
"relationships":{
"cover":{
"data":{
"type":"documents",
"id":"222"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/estate-properties/22");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("PATCH");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"estate-properties\",\"id\":\"22\",\"relationships\":{\"cover\":{\"data\":{\"type\":\"documents\",\"id\":\"222\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/estate-properties/22')
req = Net::HTTP::Patch.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"estate-properties",
"id":"22",
"relationships":{
"cover":{
"data":{
"type":"documents",
"id":"222"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"estate-properties",
"id":"22",
"relationships":{
"cover":{
"data":{
"type":"documents",
"id":"222"
}
}
}
}
}`)
req, err := http.NewRequest("PATCH", "https://app.synergycrm.ru/api/v1/estate-properties/22", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/estate-properties/22',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"estate-properties",
"id":"22",
"relationships":{
"cover":{
"data":{
"type":"documents",
"id":"222"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/estate-properties/22"
payload = json.dumps({
"data":{
"type":"estate-properties",
"id":"22",
"relationships":{
"cover":{
"data":{
"type":"documents",
"id":"222"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/estate-properties/22'));
request.body = json.encode({
"data":{
"type":"estate-properties",
"id":"22",
"relationships":{
"cover":{
"data":{
"type":"documents",
"id":"222"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | estate-properties |
URL | /api/v1/estate-properties |
Список | GET /api/v1/estate-properties |
Чтение | GET /api/v1/estate-properties/{id} |
Создание | POST /api/v1/estate-properties |
Редактирование | PATCH /api/v1/estate-properties/{id} |
Удаление | DELETE /api/v1/estate-properties/{id} |
Атрибуты
Атрибуты объекта недвижимости
{
"data": {
"type":"estate-properties",
"id": 2,
"attributes":{
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "Мой объект недвижимости",
"cover-image": "https://example.com/path/to/file.jpg",
"description": "отличное состояние",
"archived-at": "2022-02-22T12:02:22.222+03:00",
"purchase-price": "20000.0",
"map-url": "http://app.synergycrm.ru",
"railway": "Станция 1",
"cadastral-num": "222222",
"highway-name": "Шоссейное",
"subway-name": "Метро 1",
"address": "Ленинский 15",
"country": "Россия",
"region": "Москва",
"locality": "Москва",
"district": "Алтуфьевский",
"building-name": "ЖК Чистоста и порядок",
"build-at": 2005,
"city-dist": 10,
"subway-dist": 1,
"subway-transport": 5,
"subway-foot": 20,
"room-number": 100,
"total-room": 3,
"separate-rooms": 3,
"rooms-for-sell": 3,
"floor-number": 5,
"total-floors": 9,
"deal-type": null,
"object-type": "flat_and_room:flat",
"installments": "no",
"bargain": "yes",
"mortgage": "no",
"deal-category": "sell",
"balcony": "loggia",
"building-class": "aplus",
"building-type": "administrative",
"business-usage-type": "any",
"commission-type": "percent",
"condition": "normal",
"climate": "heating",
"currency": "rur",
"feature": "['pool', 'wireless_internet', 'billiards', 'boiler', 'concierge]",
"electricity": "yes",
"flat-status": "free",
"flat-type": "elite",
"gas": "no",
"gate": "drive_a_truck",
"heating": "central",
"highway-access": "direct_access",
"land-usage-type": "igs",
"layout": "free",
"material": "concrete",
"new-flat": "yes",
"ownership": "agent",
"parking-type": "on_ground",
"rent-period": "long",
"plumbing": "central",
"payment-period": "month",
"land-purpose": "settlements",
"ready-quarter": "II",
"relief": "flat",
"renovation": "good",
"sewerage": "central",
"storage-type": "Напольное",
"toilet": "joined",
"warehouse-floor": "Бетонный пол",
"warehouse-type": "Склад",
"location-type": "town",
"object-category": "flat_and_room",
"window-view": "street",
"encumbrance": "yes",
"build-stage": "done_not_passed",
"ceiling-height": 2.2,
"longitude": 22.222222,
"latitude": 22.222222,
"land-area": null,
"total-area": 69,
"living-area": 60,
"kitchen-area": 20,
"commission-sum": "10.0",
"contact-phone": "79876543211",
"uid": "5efc566c803eea8beaab850e5c779eb6",
"rent-deposit": "without",
"address-coordinates": {
"latitude": 55.78,
"longitude": 37.64
},
"customs": {
"custom-11801": "Кастомное значение"
}
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
address | string |
Ленинский 15 | Да | Адрес |
address-coordinates | json |
{"latitude": 55.78, "longitude": 37.64} | да | Координаты адреса: долгота и широта |
archived-at | datetime |
2022-02-22T12:02:22.222+03:00 |
Нет | Помещено в архив |
balcony | string |
balcony | Да | Балкон |
bargain | string |
yes | Да | Торг |
build-at | integer |
2022 | Да | Год постройки |
build-stage | string |
passed | Да | Стадия строительства |
building-class | string |
aplus | Да | Класс здания |
building-name | string |
ООО Управляющая компания | Да | Название ЖК |
building-type | string |
living_house | Да | Тип здания |
business-usage-type | string |
any | Да | Тип использования коммерческого помещения |
cached-at | datetime |
2022-02-22T12:02:22.222+03:00 |
Нет | Закэшировано |
cadastral-num | string |
22:22:222222:222 | Да | Кадастровый номер |
ceiling-height | decimal |
2.2 | Да | Высота потолков |
city-dist | integer |
10 | Да | Расстояние до города, км |
climate | string |
heating | Да | Система контроля климата |
commission-sum | decimal |
10.0 | Да | Комиссия |
commission-type | string |
percent | Да | Тип комиссии |
condition | string |
normal | Да | Состояние коммерческого помещения |
contact-phone | string |
79876543211 | Да | Контактный телефон |
country | string |
Россия | Да | Страна |
cover-image | string |
https://example.com/path/to/file.jpg |
нет | Обложка.** |
created-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата создания |
currency | string |
rur | Да | Валюта |
customs | hash |
{"custom-1":'custom value'} |
да | Свои поля |
deal-category | string |
sell | Да | Категория сделки |
deal-type | string |
sell:direct |
Да | Тип сделки |
description | string |
Хорошая квартира... |
Да | Описание |
discarded-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата перемещения в корзину |
district | string |
Автозаводский | Да | Район |
electricity | string |
yes |
Да | Электроснабжение |
encumbrance | string |
yes |
Да | Обременение |
feature | text |
['pool', 'wireless_internet', 'billiards', 'boiler', 'concierge] |
Да | Опции |
flat-status | string |
free | Да | Статус квартиры |
flat-type | string |
elite | Да | Тип квартиры |
floor-number | integer |
2 | Да | Этаж |
gas | string |
possible | Да | Газификация |
gate | string |
hyudralic_ramps | Да | Въезд |
heating | string |
central | Да | Отопление |
highway-access | string |
direct_access | Да | Транспортная доступность |
highway-name | string |
Шоссейное | Да | Шоссе |
installments | string |
no | Да | Рассрочка |
kitchen-area | decimal |
20.0 | Да | Кухня, м. кв. |
land-area | decimal |
0.0 | Да | Площадь участка, соток |
land-purpose | string |
settlements | Да | Использование земли |
land-usage-type | string |
igs | Да | Назначение земли |
latitude | decimal |
22.222222 | Да | Широта |
layout | string |
free | Да | Планировка |
living-area | decimal |
222 | Да | Жилая площадь, м. кв. |
locality | string |
Москва | Да | Населенный пункт |
location-type | string |
town | Да | Расположение |
longitude | decimal |
22.222222 | Да | Долгота |
map-url | string |
https://url_to_map | Да | Ссылка на карту |
material | string |
panel | Да | Материал стен |
mortgage | string |
no | Да | Ипотека |
name | string |
Мой объект недвижимости | Да | Название |
new-flat | string |
yes | Да | Новостройка |
object-category | string |
flat_and_room | Да | Категория объекта |
object-type | string |
foreign_estate:apartments | Да | Тип объекта |
ownership | string |
owner | Да | Собственность |
parking-type | string |
on_ground | Да | Тип парковки |
payment-period | string |
month | Да | Период оплаты |
plumbing | string |
hole | Да | Водоснабжение |
purchase-price | decimal |
20000000 | Да | Цена |
railway | string |
Красная | Да | Ж/д станция |
ready-quarter | string |
III | Да | Квартал сдачи дома |
region | string |
Московская область | Да | Регион |
relief | string |
flat | Да | Рельеф |
renovation | string |
good | Да | Ремонт |
rent-deposit | string |
two_month | Да | Залог для аренды |
rent-period | string |
long | Да | Срок аренды |
room-number | integer |
22 | Да | Квартира |
rooms-for-sell | integer |
2 | Да | Комнат продается |
separate-rooms | integer |
2 | Да | Комнат раздельно |
sewerage | string |
Центральная | Да | Канализация |
storage-type | string |
Напольное | Да | Тип хранения |
subway-dist | integer |
2 | Да | Расстояние до метро, м. |
subway-foot | integer |
2 | Да | До метро пешком, мин. |
subway-name | string |
Станция "тест" | Да | Метро |
subway-transport | integer |
2 | Да | До метро на транспорте, мин. |
toilet | string |
Совмещенный | Да | Туалет |
total-area | decimal |
222 | Да | Общая площадь, м. кв. |
total-floors | integer |
22 | Да | Этажей в доме |
total-room | integer |
2 | Да | Комнат всего |
updated-at | datetime |
2022-02-22T12:02:22.222+03:00 |
нет | Обновлено |
warehouse-floor | string |
Бетонный пол | Да | Покрытие полов |
warehouse-type | string |
Склад | Да | Тип складского помещения |
window-view | string |
Во двор | Да | Вид из окна |
previous-responsible-id | integer |
100 |
нет | Предыдущий ответственный |
Справочник атрибутов объектов недвижимости
* Обязательные поля
** Обложка может быть установлена только из тех документов, которые уже связаны с продуктом и являются изображением.
Связи
Пример данных (перечислены не все связи)
{
"data": {
"type":"estate-properties",
"id":"2",
"relationships":{
"status":{
"links":{
"self":"/api/v1/estate-properties/2/relationships/status",
"related":"/api/v1/estate-properties/2/status"
}
}
}
}
}
Пример запроса с загруженными статусами
curl "https://app.synergycrm.ru/api/v1/estate-properties?include=status" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/estate-properties?include=status");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/estate-properties')
params = {
:include => 'status',
}
uri.query = URI.encode_www_form(params)
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/estate-properties?include=status", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/estate-properties?include=status',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/estate-properties?include=status"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/estate-properties?include=status'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Статус | status | product-statuses |
Источник | source | sources |
Задачи | diaries | diaries |
Заявки | orders | orders |
Сделки | deals | deals |
Изображения | images | documents |
Обложка | cover | documents |
Документы | documents | documents |
Ответственный | responsible | users |
Продавец* | company | companies |
Продавец* | contact | contacts |
Соисполнители | performers | users |
* Одновременно указывать контакт и компанию продавцом нельзя, к объекту будет привязан только один объект
Фильтры
Получить список объектов недвижимости созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/estate-properties" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/estate-properties?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/estate-properties?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/estate-properties?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/estate-properties?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/estate-properties?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/estate-properties?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести объекты недвижимости созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести объекты недвижимости созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести объекты недвижимости обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести объекты недвижимости обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
discarded-at-null | Вывести объекты недвижимости не в корзине | filter[discarded-at-null]=true |
archived | Вывести объекты недвижимости в архиве | filter[archived]=2 |
discarded | Вывести объекты недвижимости в корзине | filter[discarded]=2 |
actual | Вывести актуальные объекты недвижимости | filter[actual]=2 |
Статусы
Создание статуса объекта недвижимости
curl "https://app.synergycrm.ru/api/v1/estate-property-statuses" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"estate-property-statuses",
"attributes":{
"name":"Статус объекта недвижимости в API",
"color":"#d2d2d2"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/estate-property-statuses");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"estate-property-statuses\",\"attributes\":{\"name\":\"Статус объекта недвижимости в API\",\"color\":\"#d2d2d2\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/estate-property-statuses')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"estate-property-statuses",
"attributes":{
"name":"Статус объекта недвижимости в API",
"color":"#d2d2d2"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"estate-property-statuses",
"attributes":{
"name":"Статус объекта недвижимости в API",
"color":"#d2d2d2"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/estate-property-statuses", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/estate-property-statuses',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"estate-property-statuses",
"attributes":{
"name":"Статус объекта недвижимости в API",
"color":"#d2d2d2"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/estate-property-statuses"
payload = json.dumps({
"data":{
"type":"estate-property-statuses",
"attributes":{
"name":"Статус объекта недвижимости в API",
"color":"#d2d2d2"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/estate-property-statuses'));
request.body = json.encode({
"data":{
"type":"estate-property-statuses",
"attributes":{
"name":"Статус объекта недвижимости в API",
"color":"#d2d2d2"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | estate-property-statuses |
URL | /api/v1/estate-property-statuses |
Список | GET /api/v1/estate-property-statuses |
Чтение | GET /api/v1/estate-property-statuses/{id} |
Создание | POST /api/v1/estate-property-statuses |
Редактирование | PATCH /api/v1/estate-property-statuses/{id} |
Удаление | DELETE /api/v1/estate-property-statuses/{id} |
Атрибуты
Атрибуты статуса объекта недвижимости
{
"data": {
"type":"estate-property-statuses",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Мой статус объекта недвижимости",
"color": "#1f2f3f"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Мой статус объекта недвижимости | да | Имя статуса объекта недвижимости |
color | string |
#1f2f3f | да | Цвет статуса объекта недвижимости |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список статусов объектов недвижимости созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/estate-property-statuses" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/estate-property-statuses?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/estate-property-statuses?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/estate-property-statuses?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/estate-property-statuses?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/estate-property-statuses?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/estate-property-statuses?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести объекты недвижимости созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести объекты недвижимости созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести объекты недвижимости обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести объекты недвижимости обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Договоры
Создание договора с предустановленными сторонами
curl "https://app.synergycrm.ru/api/v1/contracts" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"contracts",
"attributes":{
"name":"Трудовой договор",
"date":"2022-02-22"
},
"relationships":{
"first-party":{
"data":{
"type":"contacts",
"id":"2"
}
},
"second-party":{
"data":{
"type":"companies",
"id":"2"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/contracts");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"contracts\",\"attributes\":{\"name\":\"Трудовой договор\",\"date\":\"2022-02-22\"},\"relationships\":{\"first-party\":{\"data\":{\"type\":\"contacts\",\"id\":\"2\"}},\"second-party\":{\"data\":{\"type\":\"companies\",\"id\":\"2\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/contracts')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"contracts",
"attributes":{
"name":"Трудовой договор",
"date":"2022-02-22"
},
"relationships":{
"first-party":{
"data":{
"type":"contacts",
"id":"2"
}
},
"second-party":{
"data":{
"type":"companies",
"id":"2"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"contracts",
"attributes":{
"name":"Трудовой договор",
"date":"2022-02-22"
},
"relationships":{
"first-party":{
"data":{
"type":"contacts",
"id":"2"
}
},
"second-party":{
"data":{
"type":"companies",
"id":"2"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/contracts", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contracts',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"contracts",
"attributes":{
"name":"Трудовой договор",
"date":"2022-02-22"
},
"relationships":{
"first-party":{
"data":{
"type":"contacts",
"id":"2"
}
},
"second-party":{
"data":{
"type":"companies",
"id":"2"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/contracts"
payload = json.dumps({
"data":{
"type":"contracts",
"attributes":{
"name":"Трудовой договор",
"date":"2022-02-22"
},
"relationships":{
"first-party":{
"data":{
"type":"contacts",
"id":"2"
}
},
"second-party":{
"data":{
"type":"companies",
"id":"2"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/contracts'));
request.body = json.encode({
"data":{
"type":"contracts",
"attributes":{
"name":"Трудовой договор",
"date":"2022-02-22"
},
"relationships":{
"first-party":{
"data":{
"type":"contacts",
"id":"2"
}
},
"second-party":{
"data":{
"type":"companies",
"id":"2"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | contracts |
URL | /api/v1/contracts |
Список | GET /api/v1/contracts |
Чтение | GET /api/v1/contracts/{id} |
Создание | POST /api/v1/contracts |
Редактирование | PATCH /api/v1/contracts/{id} |
Удаление | DELETE /api/v1/contracts/{id} |
Атрибуты
Ниже приведен пример формата данных, в реальном ответе будут присутствовать все перечисленные атрибуты
{
"data": {
"type":"contracts",
"id":"2",
"attributes":{
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "Трудовой договор",
"number": 22,
"custom-number": "abc-22",
"date": "2022-02-22",
"archived-at": null,
"customs":{
"custom-1":"Значение",
"custom-943":"2022-02-22T12:02:22.222+03:00"
},
"archived-at":null
}
}
}
Основные атрибуты
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name | string |
Трудовой договор | да | Название договора |
number | integer |
22 | да | Номер договора |
custom_number | string |
abc-22 | да | № ручн. |
date | datetime |
2022-02-22 |
да | Дата договора |
custom | hash |
{"custom-1":'custom value'} |
да | Свои поля |
archived-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата архивации |
previous-responsible-id | integer |
100 |
нет | Предыдущий ответственный |
Связи
Пример данных (перечислены не все связи)
{
"data": {
"type":"contracts",
"id":"2",
"relationships": {
"first-party": {
"links": {
"self": "http://localhost:3000/api/v1/contracts/2/relationships/first-party",
"related": "http://localhost:3000/api/v1/contracts/2/first-party"
}
},
"second-party": {
"links": {
"self": "http://localhost:3000/api/v1/contracts/2/relationships/second-party",
"related": "http://localhost:3000/api/v1/contracts/2/second-party"
}
}
}
}
}
Пример запроса с загруженными компаниями и заявками договора
curl "https://app.synergycrm.ru/api/v1/contracts?include=companies,orders" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/contracts?include=companies,orders");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/contracts?include=companies,orders')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/contracts?include=companies,orders", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contracts?include=companies,orders',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/contracts?include=companies,orders"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/contracts?include=companies,orders'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Сторона 1 | first-party | companies , contacts |
Сторона 2 | second-party | companies , contacts |
Создатель | user | users |
Соисполнители | performers | users |
Компании | companies | companies |
Контакты | contacts | contacts |
Сделки | deals | deals |
Заявки | orders | orders |
Объекты недвижимости | estate-properties | estate-properties |
Фильтры
Получить список договоров с определённым номером
curl -G "https://app.synergycrm.ru/api/v1/contracts" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/contracts?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/contracts?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/contracts?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contracts?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/contracts?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/contracts?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести договоры созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести договоры созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести договоры обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести договоры обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
discarded-at-gte | Вывести договоры в корзине после указанного времени | filter[discarded-at-gte]=2022.02.22 12:00 |
discarded-at-lte | Вывести договоры в корзине до указанного времени | filter[discarded-at-lte]=2022.02.22 12:00 |
table-state-id | Вывести договоры по заданному табличному фильтру | filter[table-state-id]=2 |
q | Вывести договоры по поисковому запросу | filter[q]=some-query |
archived | Вывести договоры в архиве | filter[archived]=2 |
discarded | Вывести договоры в корзине | filter[discarded]=2 |
actual | Вывести актуальные договоры | filter[actual]=2 |
Сегменты
Создание нового сегмента с привязанными сделками
curl "https://app.synergycrm.ru/api/v1/segments" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"segments",
"attributes":{
"name":"Сегмент из API"
},
"relationships":{
"deals":{
"data":[{
"type":"deals",
"id":"1"
},{
"type":"deals",
"id":"2"
}]
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/segments");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"segments\",\"attributes\":{\"name\":\"Сегмент из API\"},\"relationships\":{\"deals\":{\"data\":[{\"type\":\"deals\",\"id\":\"1\"},{\"type\":\"deals\",\"id\":\"2\"}]}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/segments')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"segments",
"attributes":{
"name":"Сегмент из API"
},
"relationships":{
"deals":{
"data":[{
"type":"deals",
"id":"1"
},{
"type":"deals",
"id":"2"
}]
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"segments",
"attributes":{
"name":"Сегмент из API"
},
"relationships":{
"deals":{
"data":[{
"type":"deals",
"id":"1"
},{
"type":"deals",
"id":"2"
}]
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/segments", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/segments',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"segments",
"attributes":{
"name":"Сегмент из API"
},
"relationships":{
"deals":{
"data":[{
"type":"deals",
"id":"1"
},{
"type":"deals",
"id":"2"
}]
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/segments"
payload = json.dumps({
"data":{
"type":"segments",
"attributes":{
"name":"Сегмент из API"
},
"relationships":{
"deals":{
"data":[{
"type":"deals",
"id":"1"
},{
"type":"deals",
"id":"2"
}]
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/segments'));
request.body = json.encode({
"data":{
"type":"segments",
"attributes":{
"name":"Сегмент из API"
},
"relationships":{
"deals":{
"data":[{
"type":"deals",
"id":"1"
},{
"type":"deals",
"id":"2"
}]
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | segments |
URL | /api/v1/segments |
Список | GET /api/v1/segments |
Чтение | GET /api/v1/segments/{id} |
Создание | POST /api/v1/segments |
Редактирование | PATCH /api/v1/segments/{id} |
Удаление | DELETE /api/v1/segments/{id} |
Атрибуты
Атрибуты сегмента
{
"data": {
"type":"segments",
"id":"1",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Сегмент из API",
"due-date": "2022-02-22",
"active": true,
"customs":{
"custom-1":"Значение",
"custom-943":"2022-02-22T12:22:22.222+03:00"
}
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Сегмент из API | да | Имя сегмента |
due-date | date |
2022-02-22 |
да | Срок действия |
active | boolean |
true | да | Активность |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список источников созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/segments" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/segments?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/segments?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/segments?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/segments?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/segments?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/segments?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
name | Вывести источники с указанным именем | filter[name]=Сайт |
created-at-gte | Вывести сегменты созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести сегменты созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести сегменты обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести сегменты обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Связи
Пример данных (перечислены не все связи)
{
"data": {
"id": "2",
"type": "segments",
"links": {
"self": "http://app.synergycrm.ru/api/v1/segments/1"
},
"relationships": {
"company": {
"links": {
"self": "http://app.synergycrm.ru/api/v1/segments/1/relationships/company",
"related": "http://app.synergycrm.ru/api/v1/segments/1/company"
}
},
"contact": {
"links": {
"self": "http://app.synergycrm.ru/api/v1/segments/1/relationships/contact",
"related": "http://app.synergycrm.ru/api/v1/segments/1/contact"
}
}
}
}
}
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Создатель | user | users |
Соисполнители | performers | users |
Компания | company | companies |
Контакт | contact | contacts |
Сделки | deals | deals |
Задачи | diaries | diaries |
Счета и платежи
Пример данных для создания счета с позициями. Обязательно необходимо указать плательщика
payer
{
"data":{
"type":"invoices",
"attributes":{
"positions":[
{
"product-id":22222,
"quantity":2,
"amount":222
},
{
"product-id":22222,
"quantity":1
}]
},
"relationships":{
"payer":{
"data":{
"type":"companies",
"id":222222
}
}
}
}
}
JSON API type | invoices |
URL | /api/v1/invoices |
Список | GET /api/v1/invoices |
Чтение | GET /api/v1/invoices/{id} |
Создание | POST /api/v1/invoices |
Редактирование | PATCH /api/v1/invoices/{id} |
Удаление | DELETE /api/v1/invoices/{id} |
Атрибуты
Атрибуты счета
{
"data": {
"type":"invoices",
"id": 2,
"attributes":{
"number": 2222,
"custom-number": 2222,
"amount": "2222.0",
"due-date": "2022-02-22T12:02:22.222+03:00",
"vat-kind": "without",
"vat-rate": 10,
"reason": "л/с 22222",
"issued-at": "2022-02-22T12:02:22.222+03:00",
"vi-date": "2022-02-22T12:02:22.222+03:00",
"torg-12-date": "2022-02-22T12:02:22.222+03:00",
"upd-date": "2022-02-22T12:02:22.222+03:00",
"act-date": "2022-02-22T12:02:22.222+03:00",
"shipping-date": "2022-02-22T12:02:22.222+03:00",
"status": "not_paid",
"balance": "2222.0",
"available_without_signature": true,
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
positions | array |
[{"product-id":41922}] | да | Позиции счета |
number | integer |
222 | да | Номер автоматический |
custom-number | string |
мм.222.пп | да | Номер ручной |
amount | decimal |
2222.0 | да | Сумма счета |
vat-kind | string |
without |
да | Тип НДС |
vat-rate | integer |
10 | да | Значение НДС (%) |
due-date | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Срок оплаты |
issued-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата проведения счета |
vi-date | date |
2022-02-22 |
да | Дата СФ |
torg-12-date | date |
2022-02-22 |
да | Дата ТОРГ-12 |
upd-date | date |
2022-02-22 |
да | Дата УПД |
act-date | date |
2022-02-22 |
да | Дата акта |
shipping-date | date |
2022-02-22 |
да | Дата отгрузки |
reason | string |
л/с 22222 | да | Основание |
torg_12_reason | string |
Договор № 2 | да | Основание для ТОРГ-12 |
act_reason | string |
Договор № 2 | да | Основание для акта вып. работ |
status | string |
not_paid |
нет | Статус |
balance | decimal |
2222222.0 | нет | Неоплаченный остаток по счету |
available_without_signature | boolean |
true | да | Отметка о том, имеет ли документ юридическую силу без подписи |
show-discount | boolean |
true | да | Показывать скидку в печатной форме |
show-vendor-code | boolean |
true | да | Показывать артикул в печатной форме |
with-stamp | boolean |
true | да | Подставить печать и подпись в печатную форму |
payment-type | string |
non_cash |
да | Тип платежа. Достустимые значения cash и non_cash |
customs | hash |
{"custom-1":'custom value'} |
да | Свои поля |
previous-responsible-id | integer |
100 |
нет | Предыдущий ответственный |
Позиции
Допустимые поля для значений массива JSON-объектов атрибута positions
.
Поле | Тип | Описание |
---|---|---|
name* | string |
Переопределенное наименование товара |
product_id* | integer |
ID продукта |
quantity | integer |
Количество товара |
amount | decimal |
Сумма позиции |
is-service | boolean |
Товар (false) или услуга (true) |
unit | string |
Единица измерения |
code | code |
Код товара |
* Обязательные поля
Типы НДС
Допустимые значения для атрибута vat-kind
.
Тип НДС | Код |
---|---|
Без НДС | without |
НДС сверху | top |
НДС включен | include |
НДС позиций | positions |
Статусы счетов
Допустимые значения для атрибута status
. Значение поля рассчитывается автоматически на основе платежей и даты окончания, и редактированию не подлежит.
Статус | Код |
---|---|
Частично оплачен | partial |
Частично оплачен с просрочкой | partial_overdue |
Просрочен | overdue |
Не оплачен | not_paid |
Полностью оплачен | paid |
Без позиций | without_positions |
Отменен | cancelled |
Связи
Название | Связь | JSON API type |
---|---|---|
Плательщик* | payer | companies , contacts |
Создатель | user | users |
Сделка | deal | deals |
Заявка | order | orders |
Продукты | products | products |
Позиции | positions | invoice-positions |
Платежи | payments | invoice-payments |
Получатель | org-detail | org-details |
Банк. реквизиты | account-bank-detail | account-bank-details |
Банк. реквизиты компании | company-bank-detail | company-bank-details |
* Обязательная связь
Фильтры
Получить список счетов созданных после указанной даты
curl -G "https://app.synergycrm.ru/api/v1/invoices/?filter[created-at-gte]=2022.02.22 12:00" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/invoices/?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/invoices/?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/invoices/?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/invoices/?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/invoices/?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/invoices/?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести счета созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести счета созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести счета обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести счета обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
table-state-id | Вывести счета по заданному табличному фильтру | filter[table-state-id]=2 |
q | Вывести счета по поисковому запросу | filter[q]=some-query |
unpaid | Вывести неоплаченные счета | filter[unpaid]=2 |
archived | Вывести счета в архиве | filter[archived]=2 |
discarded | Вывести счета в корзине | filter[discarded]=2 |
actual | Вывести актуальные счета | filter[actual]=2 |
Банковские реквизиты
Создание банковских реквизитов
curl "https://app.synergycrm.ru/api/v1/account-bank-details" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"account-bank-details",
"attributes":{
"name":"test",
"kind":"calculated_invoice"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/account-bank-details");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"account-bank-details\",\"attributes\":{\"name\":\"test\",\"kind\":\"calculated_invoice\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/account-bank-details')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"account-bank-details",
"attributes":{
"name":"test",
"kind":"calculated_invoice"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"account-bank-details",
"attributes":{
"name":"test",
"kind":"calculated_invoice"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/account-bank-details", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/account-bank-details',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"account-bank-details",
"attributes":{
"name":"test",
"kind":"calculated_invoice"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/account-bank-details"
payload = json.dumps({
"data":{
"type":"account-bank-details",
"attributes":{
"name":"test",
"kind":"calculated_invoice"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/account-bank-details'));
request.body = json.encode({
"data":{
"type":"account-bank-details",
"attributes":{
"name":"test",
"kind":"calculated_invoice"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | account-bank-details |
URL | /api/v1/account-bank-details |
Список | GET /api/v1/account-bank-details |
Чтение | GET /api/v1/account-bank-details/{id} |
Создание | POST /api/v1/account-bank-details |
Редактирование | PATCH /api/v1/account-bank-details/{id} |
Удаление | DELETE /api/v1/account-bank-details/{id} |
Атрибуты
Атрибуты банковских реквизитов организации
{
"data":{
"id": "2",
"type": "account-bank-details",
"attributes":{
"created-at": "2022-02-22T12:22:22.222+03:00",
"updated-at": "2022-02-22T12:22:22.222+03:00",
"name": "МОЕ НАЗВАНИЕ БАНКОВСКИХ РЕКВИЗИТОВ",
"bank-name": "ПАО СБЕРБАНК",
"bik": "000000000",
"corr-number": "00000000000000000000",
"number": "00000000000000000000",
"is-default": true,
"active": true,
"kind": "calculated_invoice"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
МОЕ НАЗВАНИЕ БАНКОВСКИХ РЕКВИЗИТОВ | да | Название набора реквизитов |
kind* | string |
cashbox |
да | Тип реквизитов (cashbox - касса, calculated_invoice - р/счет) |
bank-name | string |
ПАО СБЕРБАНК | да | Имя банка |
bik | string |
000000000 | да | БИК банка |
corr-number | string |
00000000000000000000 | да | Корр. счет |
number | string |
00000000000000000000 | да | Номер счета |
is-default | boolean |
true |
да | Основные реквизиты? |
active | boolean |
true |
да | Активность счета |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры банковских реквизитов
Получить список банковских реквизитов, созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/account-bank-details" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/account-bank-details?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/account-bank-details?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/account-bank-details?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/account-bank-details?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/account-bank-details?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/account-bank-details?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести банковские реквизиты созданные в системе после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести банковские реквизиты созданные в системе до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести банковские реквизиты обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести банковские реквизиты обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
number | Вывести банковские реквизиты по номеру счета | filter[number]=01010101010101010101 |
bik | Вывести банковские реквизиты по БИК банка | filter[bik]=010101010 |
Юридические лица аккаунта
Создание юридических лиц
curl "https://app.synergycrm.ru/api/v1/org-details" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"org-details",
"attributes":{
"short-name":"test"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/org-details");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"org-details\",\"attributes\":{\"short-name\":\"test\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/org-details')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"org-details",
"attributes":{
"short-name":"test"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"org-details",
"attributes":{
"short-name":"test"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/org-details", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/org-details',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"org-details",
"attributes":{
"short-name":"test"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/org-details"
payload = json.dumps({
"data":{
"type":"org-details",
"attributes":{
"short-name":"test"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/org-details'));
request.body = json.encode({
"data":{
"type":"org-details",
"attributes":{
"short-name":"test"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | org-details |
URL | /api/v1/org-details |
Список | GET /api/v1/org-details |
Чтение | GET /api/v1/org-details/{id} |
Создание | POST /api/v1/org-details |
Редактирование | PATCH /api/v1/org-details/{id} |
Удаление | DELETE /api/v1/org-details/{id} |
Атрибуты
Атрибуты организации
{
"data":{
"id": "1",
"type": "org-details",
"attributes":{
"created-at": "2022-02-22T12:22:22.222+03:00",
"updated-at": "2022-02-22T12:22:22.222+03:00",
"short-name": "ООО Синергия Софт",
"full-name": "Общество с ограниченной ответственность Синергия Софт",
"website": "comany-site.com"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
short-name* | string |
ООО Синергия Софт | да | Сокращенное название |
full-name | string |
Общество с ограниченной ответственность Синергия Софт | да | Название полное |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
website | string |
comany-site.com | да | Вебсайт компании |
* Обязательные поля
Позиции счета
Пример данных для создания позиции счета. Обязательно необходимо указать счет
invoice
, связь сproduct
является опциональной, если он не будет передан, то необходимо, чтобы были педераны атрибутыinvoice-position
, такие как:name
*,quantity
,amount
,code
,is-service
,unit
,discount
{
"data":{
"type":"invoice-positions",
"attributes":{
"quantity":2,
"amount":222.2,
"discount":20
},
"relationships":{
"product":{
"data":{
"type":"products",
"id":2
}
},
"invoice":{
"data":{
"type":"invoices",
"id":222
}
}
}
}
}
JSON API type | invoice-positions |
URL | /api/v1/invoice-positions |
Список | GET /api/v1/invoice-positions |
Чтение | GET /api/v1/invoice-positions/{id} |
Создание | POST /api/v1/invoice-positions |
Редактирование | PATCH /api/v1/invoice-positions/{id} |
Удаление | DELETE /api/v1/invoice-positions/{id} |
Атрибуты
Атрибуты позиции в счете
{
"data": {
"type":"invoice-positions",
"id": 2,
"attributes":{
"name": "",
"quantity":2,
"amount": 200.0,
"is-service": false,
"code": "222"
"unit": "шт",
"discount": "0.0",
"discount-amount": "0.0",
"result-vat": "0.0",
"amount-with-discount": "200.0",
"result-amount": "200.0",
"created-at": "2022-02-22T12:22:22.222+03:00",
"updated-at": "2022-02-22T12:22:22.222+03:00"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name | string |
Товар | да | Переопределенное наименование товара |
quantity | integer |
2 | да | Количество товара |
discount | decimal |
0.0 | да | Скидка на товар (в процентах) |
discount-amount | decimal |
0.0 | нет | Сумма скидки |
amount | decimal |
2000.0 | да | Сумма позиции |
amount-with-discount | decimal |
2000,0 | нет | Сумма позиции с учетом скидки |
result-vat | decimal |
0.0 | нет | Сумма НДС |
result-amount | decimal |
2000,0 | нет | Итоговая сумма позиции (с учетом скидки и НДС) |
is-service | boolean |
false | да | Товар (false) или услуга (true) |
unit | string |
'шт' | да | Единица измерения |
code | code |
'222' | да | Код товара |
Связи
Загрузка позиций по определенному счету (id = 2)
curl "https://app.synergycrm.ru/api/v1/invoices/2/relationships/positions" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/invoices/2/relationships/positions");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/invoices/2/relationships/positions')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/invoices/2/relationships/positions", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/invoices/2/relationships/positions',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/invoices/2/relationships/positions"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/invoices/2/relationships/positions'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Название | Связь | JSON API type |
---|---|---|
Счет | invoice | invoices |
Продукт | product | products |
Платежи
Пример данных для создания платежа с типом "Приход" и привязкой к сделке. Указываем плательщика (
payer
), счет получателя (receiver-bank-detail
) и счет (invoice
), на основании которого происходит операция.
{
"data":{
"type":"invoice-payments",
"attributes":{
"direction":"income",
"amount":20.0,
"operation-created-at":"22.02.2022 12:22"
},
"relationships":{
"deal": {
"data": {
"type":"deals",
"id":2000
}
},
"payer":{
"data":{
"type":"companies",
"id":2222
}
},
"receiver-bank-detail":{
"data":{
"type":"account-bank-details",
"id":22
}
},
"invoice":{
"data":{
"type":"invoices",
"id":222
}
}
}
}
}
Пример данных для создания платежа с типом "Расход" и привязкой к сделке. Указываем получателя (
receiver
), счет получателя (receiver-bank-detail
) и счет (invoice
), на основании которого происходит операция.
{
"data":{
"type":"invoice-payments",
"attributes":{
"direction":"outcome",
"amount":20.0,
"operation-created-at":"22.02.2022 12:22"
},
"relationships":{
"deal": {
"data": {
"type":"deals",
"id":2000
}
},
"receiver":{
"data":{
"type":"companies",
"id":2222
}
},
"payer-bank-detail":{
"data":{
"type":"account-bank-details",
"id":22
}
},
"invoice":{
"data":{
"type":"invoices",
"id":222
}
}
}
}
}
Пример данных для создания платежа с типом "Перевод". Указываем с какого счета (
payer-bank-detail
) на какой счет (receiver-bank-detail
) происходит перевод.
{
"data":{
"type":"invoice-payments",
"attributes":{
"direction":"transfer",
"amount":20.0,
"operation-created-at":"22.02.2022 12:22"
},
"relationships":{
"payer-bank-detail":{
"data":{
"type":"account-bank-details",
"id":22
}
},
"receiver-bank-detail":{
"data":{
"type":"account-bank-details",
"id":222
}
}
}
}
}
Атрибуты
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
number | integer |
222 | нет | Номер автоматический |
custom-number | string |
мм.222.пп | да | Номер ручной |
amount | decimal |
2222.0 | да | Сумма счета |
purpose | string |
Счет №222 | да | Назначение |
operation-created-at* | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Когда |
operation-accounted-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Учесть в |
operation-executed-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Проведено |
operation-canceled-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Отменено |
description | string |
Мой комментарий к счету | да | Комментарий |
direction | string |
income |
да (создание) | Тип |
status | string |
canceled |
да | Статус платежа |
payment-type | string |
non_cash |
да | Тип платежа. Достустимые значения cash и non_cash |
customs | hash |
{"custom-1":'custom value'} |
да | Свои поля |
previous-responsible-id | integer |
100 |
нет | Предыдущий ответственный |
* Обязательные поля
Фильтры платежей
Получить список платежей, созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/invoice-payments" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/invoice-payments?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/invoice-payments?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/invoice-payments?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/invoice-payments?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/invoice-payments?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/invoice-payments?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести платежи созданные в системе после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести платежи созданные в системе до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести платежи обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести платежи обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
operation-created-at-gte | Вывести платежи сформированные после указанного времени | filter[operation-created-at-gte]=2022.02.22 12:00 |
operation-created-at-lte | Вывести платежи сформированные до указанного времени | filter[operation-created-at-lte]=2022.02.22 12:00 |
operation-accounted-at-gte | Вывести платежи учтённые после указанного времени | filter[operation-accounted-at-gte]=2022.02.22 12:00 |
operation-accounted-at-lte | Вывести платежи учтённые до указанного времени | filter[operation-accounted-at-lte]=2022.02.22 12:00 |
operation-executed-at-gte | Вывести платежи исполненные после указанного времени | filter[operation-executed-at-gte]=2022.02.22 12:00 |
operation-executed-at-lte | Вывести платежи исполненные до указанного времени | filter[operation-executed-at-lte]=2022.02.22 12:00 |
archived | Вывести платежи в архиве | filter[archived]=2 |
discarded | Вывести платежи в корзине | filter[discarded]=2 |
actual | Вывести актуальные платежи | filter[actual]=2 |
Статусы платежей
Название | Код |
---|---|
Исходящий, ожидающий исполнения | send_to_bank |
Проведен | executed |
Не проведен | not_executed |
Запланирован | planned |
Отменен | canceled |
Неизвестный | unknown |
Просрочен | overdue |
В обработке | process |
Типы платежей
Название | Код |
---|---|
Приход | income |
Расход | outcome |
Перевод | transfer |
Связи
Название | Связь | JSON API type |
---|---|---|
Ответственный | responsible | users |
Создатель | user | users |
Сделка | deal | deals |
Заявка | order | orders |
Плательщик | payer | companies , contacts |
Получатель | receiver | companies , contacts |
Счет | invoice | invoices |
Статья операции | invoice-payment-category | invoice-payment-categories |
Банк. реквизиты | account-bank-detail | account-bank-details |
Банк. реквизиты компании | company-bank-detail | company-bank-details |
Со счета | payer-bank-detail | company-bank-details , account-bank-details |
На счет | receiver-bank-detail | company-bank-details , account-bank-details |
Правила создания платежа
В платежах с типом "Приход" (income
) контрагентом является Плательщик (payer
). Так же
необходимо указать банковские реквизиты получателя (receiver-bank-detail
).
В платежах с типом "Расход" (outcome
) контрагентом является Получатель (receiver
).
В платежах с типом "Перевод" (transfer
) необходимо указать счет отправителя (payer-bank-detail
)
и счет получателя (receiver-bank-detail
).
Справочники
Получить список этапов сделок
curl "https://app.synergycrm.ru/api/v1/deal-stages" -H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/deal-stages");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/deal-stages')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/deal-stages", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/deal-stages',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/deal-stages"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/deal-stages'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Добавить новый источник
curl "https://app.synergycrm.ru/api/v1/sources" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"sources",
"attributes":{
"name":"Новый источник"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/sources");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"sources\",\"attributes\":{\"name\":\"Новый источник\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/sources')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"sources",
"attributes":{
"name":"Новый источник"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"sources",
"attributes":{
"name":"Новый источник"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/sources", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/sources',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"sources",
"attributes":{
"name":"Новый источник"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/sources"
payload = json.dumps({
"data":{
"type":"sources",
"attributes":{
"name":"Новый источник"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/sources'));
request.body = json.encode({
"data":{
"type":"sources",
"attributes":{
"name":"Новый источник"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Справочник | JSON API type |
---|---|
Источники | sources |
Территории | areas |
Категории своих полей | custom-field-categories |
Свои поля | custom-fields |
Продукты | products |
Конкуренты | competitors |
Статусы компаний | company-statuses |
Типы компаний | company-types |
Воронки сделок | deal-stage-categories |
Этапы сделок | deal-stages |
Статусы сделок | deal-statuses |
Причины поражения сделок | deal-loss-reasons |
Этапы заявок | order-stages |
Статусы заявок | order-statuses |
Склады | stores |
Причины поражения заявок | order-loss-reasons |
Скидки | product-discounts |
Типы продкутов | product-types |
Статусы продуктов | product-statuses |
Категории продуктов | product-categories |
Статусы телефонии | telephony-statuses |
Статьи операций | invoice-payment-categories |
Группы пользователей | user-groups |
Должности пользователей | work-positions |
Дополнительные роли | custom-roles |
Категории документа | document-template-categories |
Метки задач | labels |
Запросы к справочникам имеют следующий формат:
URL | /api/v1/{json_api_type} |
Список | GET /api/v1/{json_api_type} |
Чтение | GET /api/v1/{json_api_type}/{id} |
Создание | POST /api/v1/{json_api_type} |
Редактирование | PATCH /api/v1/{json_api_type}/{id} |
Удаление | DELETE /api/v1/{json_api_type}/{id} |
Территории
Создание новой территории
curl "https://app.synergycrm.ru/api/v1/areas" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"areas",
"attributes":{
"name":"Моя территория"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/areas");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"areas\",\"attributes\":{\"name\":\"Моя территория\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/areas')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"areas",
"attributes":{
"name":"Моя территория"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"areas",
"attributes":{
"name":"Моя территория"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/areas", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/areas',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"areas",
"attributes":{
"name":"Моя территория"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/areas"
payload = json.dumps({
"data":{
"type":"areas",
"attributes":{
"name":"Моя территория"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/areas'));
request.body = json.encode({
"data":{
"type":"areas",
"attributes":{
"name":"Моя территория"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Создание новой территории с привязанными сотрудниками
curl "https://app.synergycrm.ru/api/v1/areas" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"areas",
"attributes":{
"name":"Моя территория"
},
"relationships":{
"users":{
"data":[{
"type":"users",
"id":"2"
},{
"type":"users",
"id":"2"
}]
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/areas");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"areas\",\"attributes\":{\"name\":\"Моя территория\"},\"relationships\":{\"users\":{\"data\":[{\"type\":\"users\",\"id\":\"2\"},{\"type\":\"users\",\"id\":\"2\"}]}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/areas')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"areas",
"attributes":{
"name":"Моя территория"
},
"relationships":{
"users":{
"data":[{
"type":"users",
"id":"2"
},{
"type":"users",
"id":"2"
}]
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"areas",
"attributes":{
"name":"Моя территория"
},
"relationships":{
"users":{
"data":[{
"type":"users",
"id":"2"
},{
"type":"users",
"id":"2"
}]
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/areas", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/areas',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"areas",
"attributes":{
"name":"Моя территория"
},
"relationships":{
"users":{
"data":[{
"type":"users",
"id":"2"
},{
"type":"users",
"id":"2"
}]
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/areas"
payload = json.dumps({
"data":{
"type":"areas",
"attributes":{
"name":"Моя территория"
},
"relationships":{
"users":{
"data":[{
"type":"users",
"id":"2"
},{
"type":"users",
"id":"2"
}]
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/areas'));
request.body = json.encode({
"data":{
"type":"areas",
"attributes":{
"name":"Моя территория"
},
"relationships":{
"users":{
"data":[{
"type":"users",
"id":"2"
},{
"type":"users",
"id":"2"
}]
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | areas |
URL | /api/v1/areas |
Список | GET /api/v1/areas |
Чтение | GET /api/v1/areas/{id} |
Создание | POST /api/v1/areas |
Редактирование | PATCH /api/v1/areas/{id} |
Удаление | DELETE /api/v1/areas/{id} |
Атрибуты
Атрибуты территории
{
"data": {
"type":"areas",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Моя территория"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Моя территория | да | Имя территории |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список территорий созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/areas" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести территории созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести территории созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести территории обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести территории обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Конкуренты
Создание нового конкурента
curl "https://app.synergycrm.ru/api/v1/competitors" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"competitors",
"attributes":{
"name":"Конкурент по API",
"description":"ООО \"Конкурент\""
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/competitors");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"competitors\",\"attributes\":{\"name\":\"Конкурент по API\",\"description\":\"ООО \\\"Конкурент\\\"\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/competitors')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"competitors",
"attributes":{
"name":"Конкурент по API",
"description":"ООО \"Конкурент\""
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"competitors",
"attributes":{
"name":"Конкурент по API",
"description":"ООО \"Конкурент\""
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/competitors", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/competitors',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"competitors",
"attributes":{
"name":"Конкурент по API",
"description":"ООО \"Конкурент\""
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/competitors"
payload = json.dumps({
"data":{
"type":"competitors",
"attributes":{
"name":"Конкурент по API",
"description":"ООО \"Конкурент\""
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/competitors'));
request.body = json.encode({
"data":{
"type":"competitors",
"attributes":{
"name":"Конкурент по API",
"description":"ООО \"Конкурент\""
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | competitors |
URL | /api/v1/competitors |
Список | GET /api/v1/competitors |
Чтение | GET /api/v1/competitors/{id} |
Создание | POST /api/v1/competitors |
Редактирование | PATCH /api/v1/competitors/{id} |
Удаление | DELETE /api/v1/competitors/{id} |
Атрибуты
Атрибуты конкурента
{
"data": {
"type":"competitors",
"id":"1",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Конкурент по API",
"description": "ООО \"Конкурент\""
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
ООО "Конкурент" | да | Имя конкурента |
description | string |
Разработка компьютерного программного обеспечения | да | Описание конкурента |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список конкурентов созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/competitors" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести конкурентов созданных после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести конкурентов созданных до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести конкурентов обновлённых после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести конкурентов обновлённых до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Категории своих полей
Создание категории своих полей
curl "https://app.synergycrm.ru/api/v1/custom-field-categories" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"custom-field-categories",
"attributes":{
"class-name":"Order",
"name":"Категория полей по API"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/custom-field-categories");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"custom-field-categories\",\"attributes\":{\"class-name\":\"Order\",\"name\":\"Категория полей по API\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/custom-field-categories')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"custom-field-categories",
"attributes":{
"class-name":"Order",
"name":"Категория полей по API"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"custom-field-categories",
"attributes":{
"class-name":"Order",
"name":"Категория полей по API"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/custom-field-categories", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-field-categories',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"custom-field-categories",
"attributes":{
"class-name":"Order",
"name":"Категория полей по API"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/custom-field-categories"
payload = json.dumps({
"data":{
"type":"custom-field-categories",
"attributes":{
"class-name":"Order",
"name":"Категория полей по API"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/custom-field-categories'));
request.body = json.encode({
"data":{
"type":"custom-field-categories",
"attributes":{
"class-name":"Order",
"name":"Категория полей по API"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Атрибуты
Атрибуты категории дополнительного поля
{
"data": {
"id": "2",
"type": "custom-field-categories",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-field-categories/2"
},
"attributes": {
"created-at": "2022-02-22T12:22:22.222+03:00",
"updated-at": "2022-02-22T12:22:22.222+03:00",
"name": "Категория полей по API",
"class-name": "Order"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
День рождения | да | Название |
class-name* | string |
TelephonyCall |
да | Класс объекта |
* Обязательные поля
Ограничения по значениям
Аттрибут | Варианты |
---|---|
class-name | Company , Contact , Deal , Order , User , Product , TelephonyCall |
Фильтры
Получить список категорий своих полей созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/competitors" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
class-name | Вывести категории полей по определенному классу | filter[class-name]=Deal |
created-at-gte | Вывести категории полей созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести категории полей созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести категории полей обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести категории полей обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Свои поля
Создание поля с предустановленной категорией своих полей
curl "https://app.synergycrm.ru/api/v1/custom-fields" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "text",
"name":"Своё поле по API"
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/custom-fields");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"custom-fields\",\"attributes\":{\"required\":false,\"resource-name\": \"deals\",\"field-type\": \"text\",\"name\":\"Своё поле по API\"},\"relationships\":{\"custom-field-category\":{\"data\":{\"type\":\"custom-fields-categories\",\"id\":\"2\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/custom-fields')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "text",
"name":"Своё поле по API"
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "text",
"name":"Своё поле по API"
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/custom-fields", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-fields',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "text",
"name":"Своё поле по API"
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/custom-fields"
payload = json.dumps({
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "text",
"name":"Своё поле по API"
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/custom-fields'));
request.body = json.encode({
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "text",
"name":"Своё поле по API"
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Атрибуты
Атрибуты дополнительного поля
{
"data": {
"id": "2",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/2"
},
"attributes": {
"created-at": "2022-02-22T12:22:22.222+03:00",
"updated-at": "2022-02-22T12:22:22.222+03:00",
"name": "Мое название поля",
"required": false,
"resource-name": "deals",
"field-type": "text",
"attribute-name": "custom-2",
"params": {
"acts_like":"text"
}
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Мое название поля | да | Название |
resource-name* | string |
deals |
да | Расширяемый ресурс |
field-type* | string |
text |
да | Тип поля |
required | boolean |
true | да | Обязательное поле |
attribute-name | string |
custom-2 |
нет | Имя аттрибута для JSON API |
params | object |
{ "options": ["Пункт 1", "Пункт 2"] } | нет | Дополнительные параметры поля |
select-options | array |
[ "Пункт 1", "Пункт 2" ] | да | Атрибут для установки вариантов селекта (только у field-type select и только при создании и обновлении) |
tree-options | array |
[ { "name": "test", "childs": [] } ] | да | Дерево (только у field-type tree ). Доступны также через отдельный ресурс |
* Обязательные поля
Ограничения по значениям
Аттрибут | Варианты |
---|---|
resource-name | contacts , companies , deals , diaries , orders , products , telephony-calls , users |
field-type | text , date , number , select , tree |
Фильтры
Получить список своих полей для сделок
curl "https://app.synergycrm.ru/api/v1/custom-fields" \
-X GET \
-H "Authorization: Bearer api_token" \
-d "filter[resources]=deals"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/custom-fields");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("filter[resources]=deals");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/custom-fields')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/x-www-form-urlencoded'
req['Authorization'] = 'Bearer api_token'
req.body = 'filter[resources]=deals'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`filter[resources]=deals`)
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/custom-fields", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-fields?filter[resources]=deals',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/custom-fields?filter[resources]=deals"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/custom-fields'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Пример ответа поля с типом "текст"
{
"data": [
{
"id": "716",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/716"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "Текст",
"field-type": "text",
"required": false,
"resource-name": "deals",
"attribute-name": "custom-716",
"params": {
"multiple": "0",
"acts_like": "text",
"beauty_phone": "0"
}
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/716/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/716/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "число"
{
"data": [
{
"id": "717",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/717"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "Число",
"field-type": "number",
"required": true,
"resource-name": "deals",
"attribute-name": "custom-717",
"params": {
"extension": "кг",
"only_integer": "1",
"extension_type": "unit"
}
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/717/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/717/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "дата"
{
"data": [
{
"id": "718",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/718"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "Дата",
"field-type": "date",
"required": false,
"resource-name": "deals",
"attribute-name": "custom-718",
"params": {
"with_time": "1"
}
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/718/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/718/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "файл"
{
"data": [
{
"id": "719",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/719"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "Файл",
"field-type": "file",
"required": false,
"resource-name": "deals",
"attribute-name": "custom-719",
"params": {
"public_upload": "1"
}
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/719/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/719/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "список внешний источник"
{
"data": [
{
"id": "720",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/720"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "список внешний источник",
"field-type": "external_select",
"required": false,
"resource-name": "deals",
"attribute-name": "custom-720",
"params": {
"multiple": "1",
"password": "value",
"username": "value",
"color_key": "value",
"json_path": "value",
"label_key": "value",
"value_key": "value",
"external_source": "https://sire.ru"
}
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/720/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/720/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "список"
{
"data": [
{
"id": "721",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/721"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "Список",
"field-type": "select",
"required": false,
"resource-name": "deals",
"attribute-name": "custom-721",
"params": {
"colors": [
"#9b3178",
"#9f3e2d",
"#9e342e"
],
"values": [],
"options": [
"Первый",
"Второй",
"Третий"
],
"multiple": "1",
"display_as": "select"
},
"select-options": [
"Первый",
"Второй",
"Третий"
]
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/721/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/721/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "формула"
{
"data": [
{
"id": "711",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/711"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "Формула",
"field-type": "formula",
"required": false,
"resource-name": "deals",
"attribute-name": "custom-711",
"params": {
"formula": "<p><span class=\"label label-default fr-deletable\" contenteditable=\"false\" data-method=\"deal.amount\" data-time=\"1681972019977\">Сумма</span>* <span class=\"label label-default fr-deletable\" contenteditable=\"false\" data-method=\"deal.profit\" data-time=\"1681972028924\">Прибыль</span> / <span class=\"label label-default fr-deletable\" contenteditable=\"false\" data-method=\"deal.cost\" data-time=\"1681972038442\">Себестоимость</span> </p>",
"dependencies": {
"Deal": [
"amount",
"profit",
"cost"
]
}
}
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/711/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/711/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "рейтинг"
{
"data": [
{
"id": "740",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/740"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "рейтинг",
"field-type": "rating",
"required": false,
"resource-name": "deals",
"attribute-name": "custom-740",
"params": {} ## значение от 1 до 5
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/740/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/740/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "связь"
{
"data": [
{
"id": "741",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/741"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "связь",
"field-type": "relation",
"required": false,
"resource-name": "deals",
"attribute-name": "custom-741",
"params": {
"relation_class": "Deal"
}
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/741/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/741/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "множественная связь"
{
"data": [
{
"id": "713",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/713"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "Множественная связь",
"field-type": "multiple_relation",
"required": false,
"resource-name": "deals",
"attribute-name": "custom-713",
"params": {
"read_all": "1",
"relation_class": "Deal"
}
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/713/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/713/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "нумератор"
{
"data": [
{
"id": "742",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/742"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "нумератор",
"field-type": "sequence",
"required": false,
"resource-name": "deals",
"attribute-name": "custom-742",
"params": {
"mask": "2023-1-А",
"start_number": 1,
"auto_sequence": "1",
"sequence_group": "year"
}
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/742/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/742/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "дерево"
{
"data": [
{
"id": "714",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/714"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "Дерево",
"field-type": "tree",
"required": true,
"resource-name": "deals",
"attribute-name": "custom-714",
"params": {
"multiple": "1"
},
"tree-options": [
{
"id": 1066,
"name": "Пункт 1",
"childs": [
{
"id": 1067,
"name": "Пункт 1.1",
"childs": [
{
"id": 1068,
"name": "Пункт 1.1.1",
"childs": []
}
]
},
{
"id": 1069,
"name": "Пункт 1.2",
"childs": [
{
"id": 1070,
"name": "Пункт 1.2.1",
"childs": []
},
{
"id": 1071,
"name": "Пункт 1.2.2",
"childs": []
}
]
}
]
}
]
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/714/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/714/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "курс валюты"
{
"data": [
{
"id": "715",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/715"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "Курс Валюты",
"field-type": "exchange_rate",
"required": false,
"resource-name": "deals",
"attribute-name": "custom-715",
"params": {
"currency": "14"
}
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/715/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/715/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "таймер"
{
"data": [
{
"id": "743",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/743"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "таймер",
"field-type": "timer",
"required": false,
"resource-name": "deals",
"attribute-name": "custom-743",
"params": {
"time_unit": "hours"
}
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/743/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/743/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=deals&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Фильтр | Описание | Пример |
---|---|---|
resources | Вывести поля по определенному resource-name |
filter[resources]=deals |
created-at-gte | Вывести объекты, созданные после указанного времени | filter[created-at-gte]=2017.08.01 12:00 |
created-at-lte | Вывести объекты, созданные до указанного времени | filter[created-at-lte]=2017.08.01 12:00 |
updated-at-gte | Вывести объекты, обновлённые после указанного времени | filter[updated-at-gte]=2017.08.01 12:00 |
updated-at-lte | Вывести объекты, обновлённые до указанного времени | filter[updated-at-lte]=2017.08.01 12:00 |
Параметры дерева
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
id | integer |
23 | нет | Системный идентификатор узла дерева |
name* | string |
`Узел** | да | Текст узла |
childs* | object |
[{"name":"test", "childs":[]}] | Дочерние узлы дерева |
* Обязательные поля
Обноление своего поля с типом список и двумя пунктами
curl "https://app.synergycrm.ru/api/v1/custom-fields" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "select",
"name":"Мое поле список по API",
"select-options": [
"Пункт 1",
"Пункт 2"
]
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
}
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/custom-fields");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"custom-fields\",\"attributes\":{\"required\": false,\"resource-name\": \"deals\",\"field-type\": \"select\",\"name\":\"Мое поле список по API\",\"select-options\": [\"Пункт 1\",\"Пункт 2\"]},\"relationships\":{\"custom-field-category\":{\"data\":{\"type\":\"custom-fields-categories\",\"id\":\"2\"}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/custom-fields')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "select",
"name":"Мое поле список по API",
"select-options": [
"Пункт 1",
"Пункт 2"
]
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "select",
"name":"Мое поле список по API",
"select-options": [
"Пункт 1",
"Пункт 2"
]
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/custom-fields", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-fields',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "select",
"name":"Мое поле список по API",
"select-options": [
"Пункт 1",
"Пункт 2"
]
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/custom-fields"
payload = json.dumps({
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "select",
"name":"Мое поле список по API",
"select-options": [
"Пункт 1",
"Пункт 2"
]
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/custom-fields'));
request.body = json.encode({
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "select",
"name":"Мое поле список по API",
"select-options": [
"Пункт 1",
"Пункт 2"
]
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Создание своего поля с типом дерево. Каждому пункту будет присвоен
curl "https://app.synergycrm.ru/api/v1/custom-fields" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "tree",
"name":"Мое поле дерево по API",
"tree-options": [
{
"name": "Первый узел",
"childs": [
{
"name": "Вложенный узел",
"childs": []
}
]
}
]
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/custom-fields");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"custom-fields\",\"attributes\":{\"required\": false,\"resource-name\": \"deals\",\"field-type\": \"tree\",\"name\":\"Мое поле дерево по API\",\"tree-options\": [{\"name\": \"Первый узел\",\"childs\": [{\"name\":\"Вложенный узел\",\"childs\": []}]}]},\"relationships\":{\"custom-field-category\":{\"data\":{\"type\":\"custom-fields-categories\",\"id\":\"2\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/custom-fields')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "tree",
"name":"Мое поле дерево по API",
"tree-options": [
{
"name": "Первый узел",
"childs": [
{
"name": "Вложенный узел",
"childs": []
}
]
}
]
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "tree",
"name":"Мое поле дерево по API",
"tree-options": [
{
"name": "Первый узел",
"childs": [
{
"name": "Вложенный узел",
"childs": []
}
]
}
]
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/custom-fields", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-fields',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "tree",
"name":"Мое поле дерево по API",
"tree-options": [
{
"name": "Первый узел",
"childs": [
{
"name": "Вложенный узел",
"childs": []
}
]
}
]
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/custom-fields"
payload = json.dumps({
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "tree",
"name":"Мое поле дерево по API",
"tree-options": [
{
"name": "Первый узел",
"childs": [
{
"name": "Вложенный узел",
"childs": []
}
]
}
]
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/custom-fields'));
request.body = json.encode({
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "tree",
"name":"Мое поле дерево по API",
"tree-options": [
{
"name": "Первый узел",
"childs": [
{
"name": "Вложенный узел",
"childs": []
}
]
}
]
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Обноление своего поля с типом дерево
curl "https://app.synergycrm.ru/api/v1/custom-fields" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "tree",
"name":"Своё поле из API",
"tree-options": [
{
"id": 20
"name": "Первый узел",
"childs": [
{
"id": 22
"name": "Переименованный узел",
"childs": []
}
]
}
]
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
}
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/custom-fields");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"custom-fields\",\"attributes\":{\"required\": false,\"resource-name\": \"deals\",\"field-type\": \"tree\",\"name\":\"Своё поле из API\",\"tree-options\": [{\"id\": 20\"name\": \"Первый узел\",\"childs\": [{\"id\": 22\"name\": \"Переименованный узел\",\"childs\": []}]}]},\"relationships\":{\"custom-field-category\":{\"data\":{\"type\":\"custom-fields-categories\",\"id\":\"2\"}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/custom-fields')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "tree",
"name":"Своё поле из API",
"tree-options": [
{
"id": 20
"name": "Первый узел",
"childs": [
{
"id": 22
"name": "Переименованный узел",
"childs": []
}
]
}
]
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "tree",
"name":"Своё поле из API",
"tree-options": [
{
"id": 20
"name": "Первый узел",
"childs": [
{
"id": 22
"name": "Переименованный узел",
"childs": []
}
]
}
]
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/custom-fields", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-fields',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "tree",
"name":"Своё поле из API",
"tree-options": [
{
"id": 20
"name": "Первый узел",
"childs": [
{
"id": 22
"name": "Переименованный узел",
"childs": []
}
]
}
]
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/custom-fields"
payload = json.dumps({
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "tree",
"name":"Своё поле из API",
"tree-options": [
{
"id": 20
"name": "Первый узел",
"childs": [
{
"id": 22
"name": "Переименованный узел",
"childs": []
}
]
}
]
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/custom-fields'));
request.body = json.encode({
"data":{
"type":"custom-fields",
"attributes":{
"required": false,
"resource-name": "deals",
"field-type": "tree",
"name":"Своё поле из API",
"tree-options": [
{
"id": 20
"name": "Первый узел",
"childs": [
{
"id": 22
"name": "Переименованный узел",
"childs": []
}
]
}
]
},
"relationships":{
"custom-field-category":{
"data":{
"type":"custom-fields-categories",
"id":"2"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Пункты списка своего поля типа "Дерево"
Создание нового пункта для определённого своего поля
curl "https://app.synergycrm.ru/api/v1/custom-field-options" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"custom-field-options",
"attributes":{
"name":"Пункт по API"
},
"relationships":{
"custom-field":{
"data":{
"type":"custom-fields",
"id":"2"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/custom-field-options");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"custom-field-options\",\"attributes\":{\"name\":\"Пункт по API\"},\"relationships\":{\"custom-field\":{\"data\":{\"type\":\"custom-fields\",\"id\":\"2\"}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/custom-field-options')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"custom-field-options",
"attributes":{
"name":"Пункт по API"
},
"relationships":{
"custom-field":{
"data":{
"type":"custom-fields",
"id":"2"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"custom-field-options",
"attributes":{
"name":"Пункт по API"
},
"relationships":{
"custom-field":{
"data":{
"type":"custom-fields",
"id":"2"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/custom-field-options", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-field-options',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"custom-field-options",
"attributes":{
"name":"Пункт по API"
},
"relationships":{
"custom-field":{
"data":{
"type":"custom-fields",
"id":"2"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/custom-field-options"
payload = json.dumps({
"data":{
"type":"custom-field-options",
"attributes":{
"name":"Пункт по API"
},
"relationships":{
"custom-field":{
"data":{
"type":"custom-fields",
"id":"2"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/custom-field-options'));
request.body = json.encode({
"data":{
"type":"custom-field-options",
"attributes":{
"name":"Пункт по API"
},
"relationships":{
"custom-field":{
"data":{
"type":"custom-fields",
"id":"2"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Создание нового пункта для определённого своего поля с предустановленным родительским пунктом
curl "https://app.synergycrm.ru/api/v1/custom-field-options" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"custom-field-options",
"attributes":{
"name":"Пункт по API"
},
"relationships":{
"custom-field":{
"data":{
"type":"custom-fields",
"id":"2"
}
},
"parent":{
"data": {
"type":"custom-field-options",
"id":"2"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/custom-field-options");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"custom-field-options\",\"attributes\":{\"name\":\"Пункт по API\"},\"relationships\":{\"custom-field\":{\"data\":{\"type\":\"custom-fields\",\"id\":\"2\"}},\"parent\":{\"data\": {\"type\":\"custom-field-options\",\"id\":\"2\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/custom-field-options')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"custom-field-options",
"attributes":{
"name":"Пункт по API"
},
"relationships":{
"custom-field":{
"data":{
"type":"custom-fields",
"id":"2"
}
},
"parent":{
"data": {
"type":"custom-field-options",
"id":"2"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"custom-field-options",
"attributes":{
"name":"Пункт по API"
},
"relationships":{
"custom-field":{
"data":{
"type":"custom-fields",
"id":"2"
}
},
"parent":{
"data": {
"type":"custom-field-options",
"id":"2"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/custom-field-options", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-field-options',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"custom-field-options",
"attributes":{
"name":"Пункт по API"
},
"relationships":{
"custom-field":{
"data":{
"type":"custom-fields",
"id":"2"
}
},
"parent":{
"data": {
"type":"custom-field-options",
"id":"2"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/custom-field-options"
payload = json.dumps({
"data":{
"type":"custom-field-options",
"attributes":{
"name":"Пункт по API"
},
"relationships":{
"custom-field":{
"data":{
"type":"custom-fields",
"id":"2"
}
},
"parent":{
"data": {
"type":"custom-field-options",
"id":"2"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/custom-field-options'));
request.body = json.encode({
"data":{
"type":"custom-field-options",
"attributes":{
"name":"Пункт по API"
},
"relationships":{
"custom-field":{
"data":{
"type":"custom-fields",
"id":"2"
}
},
"parent":{
"data": {
"type":"custom-field-options",
"id":"2"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Перенос пункта от одного родителя другому
curl "https://app.synergycrm.ru/api/v1/custom-field-options/2" \
-X PATCH \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"id":"2"
"type":"custom-field-options",
"relationships":{
"custom-field":{
"data":{
"type":"custom-fields",
"id":"22"
}
},
"parent":{
"data": {
"type":"custom-field-options",
"id":"22"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/custom-field-options/2");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("PATCH");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"id\":\"2\"\"type\":\"custom-field-options\",\"relationships\":{\"custom-field\":{\"data\":{\"type\":\"custom-fields\",\"id\":\"22\"}},\"parent\":{\"data\": {\"type\":\"custom-field-options\",\"id\":\"22\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/custom-field-options/2')
req = Net::HTTP::Patch.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"id":"2"
"type":"custom-field-options",
"relationships":{
"custom-field":{
"data":{
"type":"custom-fields",
"id":"22"
}
},
"parent":{
"data": {
"type":"custom-field-options",
"id":"22"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"id":"2"
"type":"custom-field-options",
"relationships":{
"custom-field":{
"data":{
"type":"custom-fields",
"id":"22"
}
},
"parent":{
"data": {
"type":"custom-field-options",
"id":"22"
}
}
}
}
}`)
req, err := http.NewRequest("PATCH", "https://app.synergycrm.ru/api/v1/custom-field-options/2", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-field-options/2',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"id":"2"
"type":"custom-field-options",
"relationships":{
"custom-field":{
"data":{
"type":"custom-fields",
"id":"22"
}
},
"parent":{
"data": {
"type":"custom-field-options",
"id":"22"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/custom-field-options/2"
payload = json.dumps({
"data":{
"id":"2"
"type":"custom-field-options",
"relationships":{
"custom-field":{
"data":{
"type":"custom-fields",
"id":"22"
}
},
"parent":{
"data": {
"type":"custom-field-options",
"id":"22"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/custom-field-options/2'));
request.body = json.encode({
"data":{
"id":"2"
"type":"custom-field-options",
"relationships":{
"custom-field":{
"data":{
"type":"custom-fields",
"id":"22"
}
},
"parent":{
"data": {
"type":"custom-field-options",
"id":"22"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Пункт | да | Название |
* Обязательные поля
Связи
Пример данных (перечислены не все связи)
{
"data": {
"type":"custom-field-options",
"id":"2",
"relationships":{
"parent":{
"links":{
"self":"/api/v1/diary-events/2/relationships/parent",
"related":"/api/v1/diary-events/2/parent"
}
},
"custom-field":{
"links":{
"self":"/api/v1/diary-events/2/relationships/custom-field",
"related":"/api/v1/diary-events/2/custom-field"
}
}
}
}
}
Пример запроса с загруженными типами задачи и отвественными
curl "https://app.synergycrm.ru/api/v1/custom-field-options?include=parent" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/custom-field-options?include=parent");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/custom-field-options')
params = {
:include => 'parent',
}
uri.query = URI.encode_www_form(params)
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/custom-field-options?include=parent", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-field-options?include=parent',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/custom-field-options?include=parent"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/custom-field-options?include=parent'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Своё поле | custom-field | custom-fields |
Родительский пункт | parent | custom-field-options |
Дочерние пункты | children | custom-field-options |
Поддерево | subtree | custom-field-options |
Фильтры
Получить список своих полей для сделок
curl "https://app.synergycrm.ru/api/v1/custom-field-options" \
-X GET \
-H "Authorization: Bearer api_token" \
-d "filter[custom-field-id]=2"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/custom-field-options");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("filter[custom-field-id]=2");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/custom-field-options')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/x-www-form-urlencoded'
req['Authorization'] = 'Bearer api_token'
req.body = 'filter[custom-field-id]=2'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`filter[custom-field-id]=2`)
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/custom-field-options", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-field-options?filter[custom-field-id]=2',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/custom-field-options?filter[custom-field-id]=2"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/custom-field-options'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
custom-field-id | Вывести поля по определенному идентификтору своего поля | filter[custom-field-id]=deals |
Визиты Roistat
Создание нового идентификатора визита Roistat с привязанной сделкой к нему
curl "https://app.synergycrm.ru/api/v1/roistat-relations" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"roistat-relations",
"attributes":{
"roistat-visit":"2",
},
"relationships":{
"account": {
"data": {
"id": 2,
"type": "roistat-accounts"
}
},
"entity": {
"data": {
"id": 2,
"type": "deals"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/roistat-relations");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"roistat-relations\",\"attributes\":{\"roistat-visit\":\"2\",},\"relationships\":{\"account\": {\"data\": {\"id\": 2,\"type\": \"roistat-accounts\"}},\"entity\": {\"data\": {\"id\": 2,\"type\": \"deals\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/roistat-relations')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"roistat-relations",
"attributes":{
"roistat-visit":"2",
},
"relationships":{
"account": {
"data": {
"id": 2,
"type": "roistat-accounts"
}
},
"entity": {
"data": {
"id": 2,
"type": "deals"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"roistat-relations",
"attributes":{
"roistat-visit":"2",
},
"relationships":{
"account": {
"data": {
"id": 2,
"type": "roistat-accounts"
}
},
"entity": {
"data": {
"id": 2,
"type": "deals"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/roistat-relations", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/roistat-relations',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"roistat-relations",
"attributes":{
"roistat-visit":"2",
},
"relationships":{
"account": {
"data": {
"id": 2,
"type": "roistat-accounts"
}
},
"entity": {
"data": {
"id": 2,
"type": "deals"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/roistat-relations"
payload = json.dumps({
"data":{
"type":"roistat-relations",
"attributes":{
"roistat-visit":"2",
},
"relationships":{
"account": {
"data": {
"id": 2,
"type": "roistat-accounts"
}
},
"entity": {
"data": {
"id": 2,
"type": "deals"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/roistat-relations'));
request.body = json.encode({
"data":{
"type":"roistat-relations",
"attributes":{
"roistat-visit":"2",
},
"relationships":{
"account": {
"data": {
"id": 2,
"type": "roistat-accounts"
}
},
"entity": {
"data": {
"id": 2,
"type": "deals"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | roistat-relations |
URL | /api/v1/roistat-relations |
Список | GET /api/v1/roistat-relations |
Чтение | GET /api/v1/roistat-relations/{id} |
Создание | POST /api/v1/roistat-relations |
Редактирование | PATCH /api/v1/roistat-relations/{id} |
Удаление | DELETE /api/v1/roistat-relations/{id} |
Атрибуты
Атрибуты визита Roistat
{
"data": {
"type":"roistat-relations",
"id":"2",
"attributes":{
"roistat-visit": "222"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
roistat-visit* | string |
Идентификатор визита Roistat | да | Идентификатор присвоенный объекту, передаётся в Roistat |
* Обязательные поля
Связи
Пример запроса с загруженным объектом
curl "https://app.synergycrm.ru/api/v1/contacts?include=entity" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/contacts?include=entity");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/contacts')
params = {
:include => 'entity',
}
uri.query = URI.encode_www_form(params)
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/contacts?include=entity", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contacts?include=entity',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/contacts?include=entity"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/contacts?include=entity'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Интеграция с Roistat | account | roistat-accounts |
Объект | entity | deals , orders , telephony-calls , contacts |
* Связи являются обязательными для создания и обновления
Фильтры
Получить список визитов созданных со звонком
curl -G "https://app.synergycrm.ru/api/v1/roistat-relations" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[entity-type]=telephony-calls"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/roistat-relations?filter[entity-type]=telephony-calls");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/roistat-relations?filter[entity-type]=telephony-calls')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/roistat-relations?filter[entity-type]=telephony-calls", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/roistat-relations?filter[entity-type]=telephony-calls',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/roistat-relations?filter[entity-type]=telephony-calls"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/roistat-relations?filter[entity-type]=telephony-calls'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
roistat-account-id | Вывести визиты по определенному идентификатору интеграции с Roistat | filter[roistat-account-id]=2 |
entity-type | Вывести визиты по определенному entity-type |
filter[entity-type]=deals |
entity-id | Вывести визиты по определенному entity-id |
filter[entity-id]=2 |
created-at-gte | Вывести визиты созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести визиты созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести визиты обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести визиты обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Источники
Создание нового источника
curl "https://app.synergycrm.ru/api/v1/sources" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"sources",
"attributes":{
"name":"Источник по API"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/sources");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"sources\",\"attributes\":{\"name\":\"Источник по API\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/sources')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"sources",
"attributes":{
"name":"Источник по API"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"sources",
"attributes":{
"name":"Источник по API"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/sources", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/sources',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"sources",
"attributes":{
"name":"Источник по API"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/sources"
payload = json.dumps({
"data":{
"type":"sources",
"attributes":{
"name":"Источник по API"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/sources'));
request.body = json.encode({
"data":{
"type":"sources",
"attributes":{
"name":"Источник по API"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | sources |
URL | /api/v1/sources |
Список | GET /api/v1/sources |
Чтение | GET /api/v1/sources/{id} |
Создание | POST /api/v1/sources |
Редактирование | PATCH /api/v1/sources/{id} |
Удаление | DELETE /api/v1/sources/{id} |
Атрибуты
Атрибуты источника
{
"data": {
"type":"sources",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Мой источник"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Мой источник | да | Имя источника |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Ограничения по значениям
Аттрибут | Варианты |
---|---|
type | per_lead , flat_fee |
Фильтры
Получить список источников созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/sources" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/sources?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/sources?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/sources?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/sources?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/sources?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/sources?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
name | Вывести источники с указанным именем | filter[name]=Сайт |
created-at-gte | Вывести источники созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести источники созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести источники обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести источники обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Должности
Создание новой должности
curl "https://app.synergycrm.ru/api/v1/work-positions" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"work-positions",
"attributes":{
"name":"Менеджер"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/work-positions");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"work-positions\",\"attributes\":{\"name\":\"Менеджер\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/work-positions')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"work-positions",
"attributes":{
"name":"Менеджер"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"work-positions",
"attributes":{
"name":"Менеджер"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/work-positions", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/work-positions',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"work-positions",
"attributes":{
"name":"Менеджер"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/work-positions"
payload = json.dumps({
"data":{
"type":"work-positions",
"attributes":{
"name":"Менеджер"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/work-positions'));
request.body = json.encode({
"data":{
"type":"work-positions",
"attributes":{
"name":"Менеджер"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | work-positions |
URL | /api/v1/work-positions |
Список | GET /api/v1/work-positions |
Чтение | GET /api/v1/work-positions/{id} |
Создание | POST /api/v1/work-positions |
Редактирование | PATCH /api/v1/work-positions/{id} |
Удаление | DELETE /api/v1/work-positions/{id} |
Атрибуты
Атрибуты должности
{
"data": {
"type":"work-positions",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Менеджер"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Менеджер | да | Название должности |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список должностей созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/areas" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести должности, созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести должности, созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести должности, обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести должности, обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Статьи операций
Создание новой статьи операции
curl "https://app.synergycrm.ru/api/v1/invoice-payment-categories" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"invoice-payment-categories",
"attributes":{
"name":"Статья операции из API",
"kind":"income"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/invoice-payment-categories");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"invoice-payment-categories\",\"attributes\":{\"name\":\"Статья операции из API\",\"kind\":\"income\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/invoice-payment-categories')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"invoice-payment-categories",
"attributes":{
"name":"Статья операции из API",
"kind":"income"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"invoice-payment-categories",
"attributes":{
"name":"Статья операции из API",
"kind":"income"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/invoice-payment-categories", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/invoice-payment-categories',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"invoice-payment-categories",
"attributes":{
"name":"Статья операции из API",
"kind":"income"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/invoice-payment-categories"
payload = json.dumps({
"data":{
"type":"invoice-payment-categories",
"attributes":{
"name":"Статья операции из API",
"kind":"income"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/invoice-payment-categories'));
request.body = json.encode({
"data":{
"type":"invoice-payment-categories",
"attributes":{
"name":"Статья операции из API",
"kind":"income"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | invoice-payment-categories |
URL | /api/v1/invoice-payment-categories |
Список | GET /api/v1/invoice-payment-categories |
Чтение | GET /api/v1/invoice-payment-categories/{id} |
Создание | POST /api/v1/invoice-payment-categories |
Редактирование | PATCH /api/v1/invoice-payment-categories/{id} |
Удаление | DELETE /api/v1/invoice-payment-categories/{id} |
Атрибуты
Атрибуты статтьи операции
{
"data": {
"type":"invoice-payment-categories",
"id":"1",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Счет",
"kind": "outcome"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Холодные звонки | да | Имя статьи операции |
kind* | string |
income | да | Тип статьи операции. Может быть только трёх значений: income , outcome и transfer |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список статей операций созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/invoice-payment-categories" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/invoice-payment-categories?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/invoice-payment-categories?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/invoice-payment-categories?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/invoice-payment-categories?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/invoice-payment-categories?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/invoice-payment-categories?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести статьи операций созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести статьи операций созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести статьи операций обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести статьи операций обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Метки задач
Создание новой метки
curl "https://app.synergycrm.ru/api/v1/labels" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"labels",
"attributes":{
"name":"Метка задачи",
"color":"#266ca6",
"kind":"diaries"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/labels");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"labels\",\"attributes\":{\"name\":\"Метка задачи\",\"color\":\"#266ca6\",\"kind\":\"diaries\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/labels')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"labels",
"attributes":{
"name":"Метка задачи",
"color":"#266ca6",
"kind":"diaries"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"labels",
"attributes":{
"name":"Метка задачи",
"color":"#266ca6",
"kind":"diaries"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/labels", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/labels',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"labels",
"attributes":{
"name":"Метка задачи",
"color":"#266ca6",
"kind":"diaries"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/labels"
payload = json.dumps({
"data":{
"type":"labels",
"attributes":{
"name":"Метка задачи",
"color":"#266ca6",
"kind":"diaries"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/labels'));
request.body = json.encode({
"data":{
"type":"labels",
"attributes":{
"name":"Метка задачи",
"color":"#266ca6",
"kind":"diaries"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | labels |
URL | /api/v1/labels |
Список | GET /api/v1/labels |
Чтение | GET /api/v1/labels/{id} |
Создание | POST /api/v1/labels |
Редактирование | PATCH /api/v1/labels/{id} |
Удаление | DELETE /api/v1/labels/{id} |
Атрибуты
Атрибуты метки задачи
{
"data": {
"type":"labels",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name":"Метка задачи",
"color":"#266ca6",
"kind":"diaries"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Метка задачи | да | Имя метки |
color | string |
#266ca6 | да | Цвет метки |
kind | string |
diaries | да | Объект метки |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Ограничения по значениям
Аттрибут | Варианты |
---|---|
kind | diaries |
Фильтры
Получить список меток созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/labels" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/labels?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/labels?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/labels?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/labels?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/labels?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/labels?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
name | Вывести метки с указанным именем | filter[name]=Метка задачи |
created-at-gte | Вывести метки созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести метки созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести метки обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести метки обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Пользователи
Обновление номера телефона
curl "https://app.synergycrm.ru/api/v1/profile" \
-X PATCH \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"id": 2,
"type":"users",
"attributes":{
"phone":"+79876543211"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/profile");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("PATCH");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"id\": 2,\"type\":\"users\",\"attributes\":{\"phone\":\"+79876543211\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/profile')
req = Net::HTTP::Patch.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"id": 2,
"type":"users",
"attributes":{
"phone":"+79876543211"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"id": 2,
"type":"users",
"attributes":{
"phone":"+79876543211"
}
}
}`)
req, err := http.NewRequest("PATCH", "https://app.synergycrm.ru/api/v1/profile", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/profile',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"id": 2,
"type":"users",
"attributes":{
"phone":"+79876543211"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/profile"
payload = json.dumps({
"data":{
"id": 2,
"type":"users",
"attributes":{
"phone":"+79876543211"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/profile'));
request.body = json.encode({
"data":{
"id": 2,
"type":"users",
"attributes":{
"phone":"+79876543211"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | users |
URL | /api/v1/users |
Список | GET /api/v1/users |
Чтение | GET /api/v1/users/{id} |
Создание | POST /api/v1/users |
Редактирование | PATCH /api/v1/users/{id} |
Атрибуты
{
"data": {
"id": "2",
"type": "users",
"attributes": {
"created-at": "2022-02-22T12:02:22.000+00:00",
"updated-at": "2022-02-22T12:02:22.000+00:00",
"cached-at": "2022-02-22T12:02:22.000+00:00",
"email": "support@test.com",
"first-name": "Иван",
"last-name": "Иванов",
"middle-name": "",
"phone": "+79876543211",
"custom-fields":{},
"mail-signature": "",
"address-coordinates": {
"latitude": 55.78,
"longitude": 37.64
},
"rights-config":{
"edit-menu": true,
"manage-articles": false,
"edit-mail-accounts": false,
"allow-work-with-kkm": false,
"edit-entity-columns": true,
"edit-entity-widgets": true,
"allow-manual-dialing": true,
"manage-work-schedules": true,
"edit-entity-nested-forms": true,
"edit-notification-settings": true,
"manage-irresponsible-entity": false,
"allow-cancel-completed-tasks": true
},
"disabled": false,
"role": "executive",
"avatar": "https://example.com/test.png",
"last-sign-in-at": "2022-02-22T12:02:22.000+00:00",
"current-sign-in-at": "2022-02-22T12:02:22.000+00:00",
"unconfirmed-email": null,
"web-form-token": "6abcff2aa1eea0f899e741a63a3d92a1",
"time-zone": "Europe/Moscow",
"locale": "ru",
"online": false,
"work-time-status":"true",
"account-id": 2
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
first-name | string |
Иван |
да | Имя |
last-name | string |
Иванов |
да | Фамилия |
middle-name | string |
Иванович |
да | Отчество |
string |
test@mail.ru |
да | ||
password | string |
strongpswd |
да | Пароль (обязателен при создании пользователя) |
phone | string |
+79876543211 |
да | Телефон |
mail-signature | string |
С уважением |
да | Подпись при отправке письма |
address | string |
Ленинский 15 |
да | Адрес |
address-coordinates | json |
{"latitude": 55.78, "longitude": 37.64} | да | Координаты адреса: долгота и широта |
rights-config | json |
да | Дополнительные права пользователя | |
disabled | boolean |
true |
да | Статус актиности пользователя |
role | string |
basic , manager , executive |
да | Основная роль пользователя |
avatar | string |
https://example.com/link/to/avatar.png |
нет | Аватар пользователя |
last-sign-in-at | datetime |
нет | Дата предыдущей авторизации | |
current-sign-in-at | datetime |
нет | Дата текущей авторизации | |
unconfirmed-email | string |
changed@email.com |
нет | Неподтвержденный адрес email |
web-form-token | string |
12345beaf |
нет | Токен для создания вебформы |
time-zone | string |
Tokyo |
нет | Временная зона в формате tzdata |
locale | string |
ru , en |
нет | Язык интерфейса системы |
online | boolean |
true |
нет | Онлайн-статус (работает ли пользователь сейчас в системе?) |
notification-settings | json |
нет | Настройки уведомлений пользователя | |
work-time-status | boolean |
true , false |
нет | Рабочая сессия |
created-at | datetime |
2022-02-22T12:02:22.000+00:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:02:22.000+00:00 |
нет | Дата обновления |
rights-config (Дополнительные права)
Запретим пользователю вводить номер телефона вручную
curl "https://app.synergycrm.ru/api/v1/users/10" \
-X PATCH \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"id": 2,
"type":"users",
"attributes":{
"rights-config":{
"allow-manual-dialing": false
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/users/10");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("PATCH");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"id\": 2,\"type\":\"users\",\"attributes\":{\"rights-config\":{\"allow-manual-dialing\": false}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/users/10')
req = Net::HTTP::Patch.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"id": 2,
"type":"users",
"attributes":{
"rights-config":{
"allow-manual-dialing": false
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"id": 2,
"type":"users",
"attributes":{
"rights-config":{
"allow-manual-dialing": false
}
}
}
}`)
req, err := http.NewRequest("PATCH", "https://app.synergycrm.ru/api/v1/users/10", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/users/10',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"id": 2,
"type":"users",
"attributes":{
"rights-config":{
"allow-manual-dialing": false
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/users/10"
payload = json.dumps({
"data":{
"id": 2,
"type":"users",
"attributes":{
"rights-config":{
"allow-manual-dialing": false
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/users/10'));
request.body = json.encode({
"data":{
"id": 2,
"type":"users",
"attributes":{
"rights-config":{
"allow-manual-dialing": false
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Название | Описание |
---|---|
edit-menu | Может ли пользователь редактировать видимость и порядок элементов меню |
manage-articles | Возможность редактировать базу знаний |
edit-mail-accounts | Внесение изменений в настройки почтовых аккаунтов |
allow-work-with-kkm | Разрешить работать с онлайн-кассами (ККМ) |
edit-entity-columns | Разрешить менять видимость колонок в таблицах объектов |
edit-entity-widgets | Разрешить менять видимость виджетов в карточках объектов |
allow-manual-dialing | Разрешить вводить номер телефона вручную (при совершении звонка) |
manage-work-schedules | Управление рабочим графиком |
edit-entity-nested-forms | Редактирование полей в форме для вложенных объектов |
edit-notification-settings | Редактирование параметров оповещений |
manage-irresponsible-entity | Управлять сущностями без ответственных юзеров |
allow-cancel-completed-tasks | Разрешить отмену завершенных задач |
Связи
Пример данных
{
"data": {
"type":"users",
"id":"2",
"relationships":{
"custom-role":{
"links":{
"self":"/api/v1/users/2/relationships/custom-role",
"related":"/api/v1/users/2/custom-role"
}
},
"work-position":{
"links":{
"self":"/api/v1/users/2/relationships/work-position",
"related":"/api/v1/users/2/work-position"
}
}
}
}
}
Назчение пользователю новой дополнительной роли
curl "https://app.synergycrm.ru/api/v1/users/10" \
-X PATCH \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"id": 2,
"type":"users",
"relationships":{
"custom-role":{
"data":{
"type":"custom-roles",
"id":2
}
}
}
}
}
EOF
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Дополнительная роль | custom-role | custom-roles |
Должность | work-position | work-positions |
Группа | user-group | user-groups |
Фильтры
Получить список сотрудников по активной рабочей сессии
curl -G "https://app.synergycrm.ru/api/v1/users/?filter[work-time-status]=active" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/users/?filter[work-time-status]=active");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/users/?filter[work-time-status]=active')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/users/?filter[work-time-status]=active", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/users/?filter[work-time-status]=active',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/users/?filter[work-time-status]=active"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/users/?filter[work-time-status]=active'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести пользователей созданных после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести пользователей созданных до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести пользователей обновлённых после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести пользователей обновлённых до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
q | Вывести пользователей по поисковому запросу | filter[q]=some-query |
work-time-status | Вывести пользователей по рабочей сессии | filter[work-time-status]=active , filter[work-time-status]=inactive |
Вебхуки
Раздел системы: Настройки -> Автоматизации -> Сценарии
С помощью вебхуков вы можете отправить информацию об объекте автоматизации на указанный адрес.
Объектом автоматизации может быть сделка, заявка, почтовое сообщение, компания или контакт.
Структура JSON
Структура JSON
{
"type": "Deal",
"timestamp": 1519466739,
"data": {
"id": 2
},
"custom_fields": {
"custom_1": "Свое поле №1"
}
}
Информация об объекте представлена в формате JSON. Каждый объект JSON имеет следующие поля:
type
- тип объекта. может быть Deal
, Order
, Company
, Contact
, MailMessage
timestamp
- дата срабатывания автоматизации. Может не совпадать с временем отправки в том
случае если сообщение было отправлено повторно (например, адрес указанный для вебхука
недоступен или возвращает ошибку).
data
- вся информация по объекту
custom_fields
- база данных с сопоставлением имен своих полей и сгенерированных имен системой
Сделки
{
"type": "Deal",
"timestamp": 1519466985,
"data": {
"id": 22222,
"name": "Сделка",
"description": "Описание сделки",
"note": "Текст заметки по сделке",
"amount": "2.0",
"cost": "2.0",
"finished_at": null,
"planned_at": null,
"created_at": "02.02.2022 22:22:22",
"updated_at": "02.02.2022 22:22:22",
"user_id": 2,
"user": "Имя пользователя",
"responsible_id": 2,
"responsible": "Имя пользователя",
"stage_id": 222,
"stage": "В работе",
"stage_category_id": 2,
"stage_category": "Партнеры",
"status_id": 2,
"status": "Переговоры",
"source_id": 2,
"source": "Вебсайт",
"area_id": 2,
"area": "Москва",
"loss_reason_id": null,
"loss_reason": "",
"loss_competitor_id": null,
"loss_competitor": "",
"company_id": null,
"company": "",
"contact_id": null,
"contact": "",
"custom_5808": [],
"custom_10535": [],
"custom_11906": []
},
"custom_fields": {
"custom_5808": "Значение из поля 1",
"custom_10535": "Значение из поля 2",
"custom_11906": "Значение из поля 3"
}
}
Атрибут | Описание |
---|---|
id | ID объекта |
name | Название |
description | Описание |
note | Заметка |
amount | Цена |
cost | Себестоимость |
finished_at | Фактическая дата закрытия |
planned_at | Планируемая дата закрытия |
created_at | Дата создания |
updated_at | Дата последнего обновления |
user_id | Создатель (ID) |
user | Создатель (ФИО) |
responsible_id | Ответственный (ID) |
responsible | Ответственный (ФИО) |
stage_id | Этап (ID) |
stage | Этап (название) |
stage_category_id | Воронка (ID) |
stage_category | Воронка (название) |
status_id | Статус (ID) |
status | Статус (название) |
source_id | Источник (ID) |
source | Источник (название) |
area_id | Территория (ID) |
area | Территория (название) |
loss_reason_id | Причина поражения (ID) |
loss_reason | Причина поражения (название) |
loss_competitor_id | Конкурент поражения (ID) |
loss_competitor | Конкурент поражения (название) |
company_id | Компания (ID) |
company | Компания (название) |
contact_id | Контакт (ID) |
contact | Контакт (ФИО) |
custom_{id} | Свои поля |
Заявки
{
"type": "Order",
"timestamp": 1519556577,
"data": {
"id": 22222,
"name": "Заявка",
"description": "Описание заявки",
"note": null,
"amount": "2.0",
"cost": "2.0",
"created_at": "02.02.2022 22:22:22",
"updated_at": "02.02.2022 22:22:22",
"user_id": 2,
"user": "Имя пользователя",
"responsible_id": null,
"responsible": "",
"stage_id": 2,
"stage": "Проиграна",
"status_id": 2,
"status": "Отказ",
"source_id": 2,
"source": "Вебсайт",
"loss_reason_id": 2,
"loss_reason": "Ушел к конкуренту",
"loss_competitor_id": 2,
"loss_competitor": "ООО Компания конкурент",
"company_id": 2,
"company": "ООО Клиент",
"contact_id": 2,
"contact": "Иванов Иван Иванович",
"custom_26": "",
"custom_27": "",
"custom_130": "",
"custom_12239": []
},
"custom_fields": {
"custom_26": "Значение из поля 1",
"custom_27": "Значение из поля 2",
"custom_130": "Значение из поля 3",
"custom_12239": "Значение из поля 4"
}
}
Атрибут | Описание |
---|---|
id | ID объекта |
name | Название |
description | Описание |
note | Заметка |
amount | Цена |
cost | Себестоимость |
finished_at | Фактическая дата закрытия |
planned_at | Планируемая дата закрытия |
created_at | Дата создания |
updated_at | Дата последнего обновления |
user_id | Создатель (ID) |
user | Создатель (ФИО) |
responsible_id | Ответственный (ID) |
responsible | Ответственный (ФИО) |
stage_id | Этап (ID) |
stage | Этап (название) |
status_id | Статус (ID) |
status | Статус (название) |
source_id | Источник (ID) |
source | Источник (название) |
loss_reason_id | Причина поражения (ID) |
loss_reason | Причина поражения (название) |
loss_competitor_id | Конкурент поражения (ID) |
loss_competitor | Конкурент поражения (название) |
company_id | Компания (ID) |
company | Компания (название) |
contact_id | Контакт (ID) |
contact | Контакт (ФИО) |
custom_{id} | Свои поля |
Компании
{
"type": "Company",
"timestamp": 1519556956,
"data": {
"name": "ООО Синергия Софт",
"general_phone": "+79876543211",
"work_phone": "+79876543211",
"other_phone": "+79876543211",
"fax": "+79876543211",
"email": "email@mail.ru",
"other_email": "email@mail.com",
"website": "synergycrm.ru",
"description": "Разработка компьютерного программного обеспечения",
"note": "Заметка по компании",
"inn": "0101010101",
"full_name": "Общество с ограниченной ответственностью Синергия Софт",
"short_name": "ООО Синергия Софт",
"ogrn": "0101010101010",
"kpp": "010101010",
"okved": "62.01",
"manager_name": "Сидоров В.В.",
"manager_position": "Генеральный директор",
"lawfulness_base": null,
"accountant": "Иванов И.И.",
"country": "Россия",
"address": "Университетская ул, д. 7, помещ. 503",
"region": "Республика Татарстан",
"city": "Иннополис",
"street": "Университетская",
"house": "1",
"flat": null,
"zip_code": "22222-0000",
"juristic_country": "Россия",
"juristic_region": "Республика Татарстан",
"juristic_city": "Иннополис",
"juristic_zip-code": "22222-0000",
"juristic_street": "Университетская",
"juristic_house": "1",
"juristic_build": "1",
"juristic_office": "1",
"actual_country": "Россия",
"actual_region": "Республика Татарстан",
"actual_city": "Иннополис",
"actual_zip-code": "22222-0000",
"actual_street": "ул. Университетская",
"actual_house": "22а",
"actual_build": "2",
"actual_office": "123",
"mailing_country": "Россия",
"mailing_region": "Республика Татарстан",
"mailing_city": "Иннополис",
"mailing_zip-code": "22222-0000",
"mailing_street": "Университетская",
"mailing_house": "1",
"mailing_build": "1",
"mailing_office": "1",
"created_at": "22.02.2022 12:22:22",
"updated_at": "22.02.2022 12:22:22",
"user_id": 222,
"user": "Имя пользователя",
"responsible_id": null,
"responsible": "",
"source_id": 2,
"source": "Вебсайт",
"status_id": 2,
"status": "Работает",
"type_id": 2,
"type": "Партнер",
"custom_1": "Значение"
},
"custom_fields": {
"custom_1": "Значение"
}
}
Атрибут | Описание |
---|---|
name | Название |
general_phone | Осн. тел. |
work_phone | Раб. тел. |
other_phone | Доп. тел. |
fax | Факс |
other_email | Доп. e-mail |
website | Вебсайт |
description | Описание |
note | Заметка |
inn | ИНН |
full_name | Полн. наименование |
short_name | Сокр. наименование |
ogrn | ОГРН |
kpp | КПП |
okved | ОКВЭД |
manager_name | ФИО рук-ля |
manager_position | Должность рук-ля |
lawfulness_base | Правомочность |
accountant | Гл.бухгалтер |
country | Страна |
address | Адрес |
region | Регион |
city | Город |
street | Улица |
house | Дом |
flat | Офис/Квартира |
zip_code | Индекс |
juristic_country | Юр. страна |
juristic_region | Юр. регион |
juristic_city | Юр. город |
juristic_zip_code | Юр. индекс |
juristic_street | Юр. улица |
juristic_house | Юр. дом |
juristic_build | Юр. строение |
juristic_office | Юр. офис |
actual_country | Факт. страна |
actual_region | Факт. регион |
actual_city | Факт. город |
actual_zip_code | Факт. индекс |
actual_street | Факт. улица |
actual_house | Факт. дом |
actual_build | Факт. корпус |
actual_office | Факт. офис |
mailing_country | Почт. страна |
mailing_region | Почт. регион |
mailing_city | Почт. город |
mailing_zip_code | Почт. индекс |
mailing_street | Почт. улица |
mailing_house | Почт. дом |
mailing_build | Почт. строение |
mailing_office | Почт. офис |
created_at | Создано |
updated_at | Обновлено |
user_id | Создатель (ID) |
user | Создатель |
responsible_id | Ответственный (ID) |
responsible | Ответственный |
source_id | Источник (ID) |
source | Источник |
status_id | Статус (ID) |
status | Статус |
type_id | Тип (ID) |
type | Тип |
custom_{id} | Свои поля |
Контакты
{
"type": "Contact",
"timestamp": 1519557678,
"data": {
"name": "Lastname Firstname Middlename",
"position": "lll",
"first_name": "Firstname",
"last_name": "Lastname",
"middle_name": "Middlename",
"mobile_phone": null,
"general_phone": null,
"work_phone": null,
"other_phone": null,
"email": "llll@llll.lll",
"other_email": null,
"description": "basic",
"note": null,
"fax": null,
"website": null,
"created_at": "27.12.2017 10:00:11",
"updated_at": "27.12.2017 10:00:11",
"work_country": null,
"work_region": null,
"work_city": null,
"work_zipcode": null,
"work_street": null,
"work_building": null,
"work_housing": null,
"work_apartment": null,
"home_country": null,
"home_region": null,
"home_city": null,
"home_zipcode": null,
"home_street": null,
"home_building": null,
"home_housing": null,
"home_apartment": null,
"vkontakte": null,
"facebook": null,
"linkedin": null,
"odnoklassniki": null,
"instagram": null,
"twitter": null,
"whatsapp": null,
"viber": null,
"telegram": null,
"skype": null,
"responsible_id": 2,
"responsible": "Яковлевски Эндрю",
"user_id": 2,
"user": "Яковлевски Эндрю",
"status_id": null,
"status": "",
"type_id": 19975,
"type": "Регистрация",
"source_id": null,
"source": ""
},
"custom_fields": {}
}
Атрибут | Описание |
---|---|
name | ФИО |
position | Должность |
first_name | Имя |
last_name | Фамилия |
middle_name | Отчество |
mobile_phone | Моб. тел. |
general_phone | Осн. тел. |
work_phone | Раб. тел. |
other_phone | Доп. тел. |
other_email | Доп. e-mail |
description | Описание |
note | Заметка |
fax | Факс |
website | Вебсайт |
created_at | Создано |
updated_at | Изменено |
work_country | Раб. страна |
work_region | Раб. регион |
work_city | Раб. город |
work_zipcode | Раб. индекс |
work_street | Раб. улица |
work_building | Раб. дом |
work_housing | Раб. корпус |
work_apartment | Раб. офис |
home_country | Дом. страна |
home_region | Дом. регион |
home_city | Дом. город |
home_zipcode | Дом. индекс |
home_street | Дом. улица |
home_building | Дом. дом |
home_housing | Дом. корпус |
home_apartment | Дом. квартира |
vkontakte | VK |
odnoklassniki | Одноклассники |
viber | Viber |
telegram | Telegram |
skype | Skype |
responsible_id | Ответственный (ID) |
responsible | Ответственный |
user_id | Создатель (ID) |
user | Создатель |
status_id | Status (ID) |
status | Статус |
type_id | Тип (ID) |
type | Тип |
source_id | Источник (ID) |
source | Источник |
Почтовые сообщения
{
"type": "MailMessage",
"timestamp": 1519557828,
"data": {
"from": [
{
"name": "Иван Иванов",
"address": "ivanov@mail.ru"
}
],
"to": [
{
"name": "Иван Сидоров",
"address": "sidorov@mail.ru"
}
],
"subject": "Тема письма",
"message_id": "<00000000000000@web52g.mail.ru>",
"body": "<div>Здравствуйте!</div><br /><span lang=\"ru\">Тут текст сообщения</span>",
"direction": "outgoing",
"replied_at": null,
"forwarded_at": null,
"created_at": "22.02.2022 12:22:22",
"folder_id": 2,
"folder": "Отправленные",
"label_id": 2,
"label": "Реклама",
"responsible_id": 2,
"responsible": "Имя ответственного",
"creator_id": 2,
"creator": "Иван Иванов"
}
}
Атрибут | Описание |
---|---|
from | От кого |
to | Кому |
subject | Тема |
message_id | MessageID у почтового провайдера |
body | Сообщение |
direction | Тип (outgoing - исходящее, incoming - входящее) |
replied_at | Отвечено |
forwarded_at | Переслано |
created_at | Создано |
folder_id | Папка (ID) |
folder | Папка |
label_id | Метка (ID) |
label | Метка |
responsible_id | Ответственный (ID) |
responsible | Ответственный |
creator_id | Создатель (ID) |
creator | Создатель |
Телефонные звонки
{
"type": "TelephonyCall",
"data": {
"id": 22222,
"direction": "outgoing",
"call_id": "out_a07d018ea75be3b71087e99072b43497f5fe7342",
"dst_phone_number": "+79876543211",
"src_phone_number": "222",
"number": 22222,
"tech_code": null,
"duration": null,
"started_at": "22.02.2022 12:22:22",
"answered_at": null,
"completed_at": null,
"created_at": "22.02.2022 12:22:22",
"updated_at": "22.02.2022 12:22:22",
"status_id": 2,
"status": "Неотвечено",
"custom_42199": null,
"custom_48153": [ ],
"custom_42198": null
},
"timestamp":1572421245
}
Атрибут | Описание |
---|---|
id | ID |
direction | Направление |
call_id | ID выданный на АТС |
dst_phone_number | Кому |
src_phone_number | От кого |
number | Номер |
tech_code | Тех. код |
duration | Длительность |
started_at | Время начала |
answered_at | Время ответа |
completed_at | Время завершения |
created_at | Время создания |
updated_at | Время последнего обновления |
status_id | ID статуса |
status | Статус |
custom_* | Свои поля |
Активности
Чтение активности с предустановленным ресурсом контакта
curl "https://app.synergycrm.ru/api/v1/activities" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[trackable-type]=contacts"
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/activities");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("filter[trackable-type]=contacts");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/activities')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = 'filter[trackable-type]=contacts'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`filter[trackable-type]=contacts`)
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/activities", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/activities?filter[trackable-type]=contacts',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/activities?filter[trackable-type]=contacts"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/activities?filter[trackable-type]=contacts'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Создание примечания с предустановленным ресурсом контакта и подтверждением прочтения
curl "https://app.synergycrm.ru/api/v1/activities" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"activities",
"attributes":{
"key":"message",
"message":"Hello!",
"confirm-read":true,
"user-ids":[1, 2, 3]
},
"relationships":{
"trackable":{
"data":{
"type":"contacts",
"id":"2"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/activities");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"activities\",\"attributes\":{\"key\":\"message\",\"message\":\"Hello!\",\"confirm-read\":true,\"user-ids\":[1, 2, 3]},\"relationships\":{\"trackable\":{\"data\":{\"type\":\"contacts\",\"id\":\"2\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/activities')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"activities",
"attributes":{
"key":"message",
"message":"Hello!",
"confirm-read":true,
"user-ids":[1, 2, 3]
},
"relationships":{
"trackable":{
"data":{
"type":"contacts",
"id":"2"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"activities",
"attributes":{
"key":"message",
"message":"Hello!",
"confirm-read":true,
"user-ids":[1, 2, 3]
},
"relationships":{
"trackable":{
"data":{
"type":"contacts",
"id":"2"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/activities", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/activities',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"activities",
"attributes":{
"key":"message",
"message":"Hello!",
"confirm-read":true,
"user-ids":[1, 2, 3]
},
"relationships":{
"trackable":{
"data":{
"type":"contacts",
"id":"2"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/activities"
payload = json.dumps({
"data":{
"type":"activities",
"attributes":{
"key":"message",
"message":"Hello!",
"confirm-read":true,
"user-ids":[1, 2, 3]
},
"relationships":{
"trackable":{
"data":{
"type":"contacts",
"id":"2"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/activities'));
request.body = json.encode({
"data":{
"type":"activities",
"attributes":{
"key":"message",
"message":"Hello!",
"confirm-read":true,
"user-ids":[1, 2, 3]
},
"relationships":{
"trackable":{
"data":{
"type":"contacts",
"id":"2"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Изменение существующего примечания
curl "https://app.synergycrm.ru/api/v1/activities/2" \
-X PATCH \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"activities",
"attributes":{
"key":"message",
"message":"New text",
"user-ids":[1, 2]
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/activities/2");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("PATCH");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"activities\",\"attributes\":{\"key\":\"message\",\"message\":\"New text\",\"user-ids\":[1, 2]}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/activities/2')
req = Net::HTTP::Patch.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"activities",
"attributes":{
"key":"message",
"message":"New text",
"user-ids":[1, 2]
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"activities",
"attributes":{
"key":"message",
"message":"New text",
"user-ids":[1, 2]
}
}
}`)
req, err := http.NewRequest("PATCH", "https://app.synergycrm.ru/api/v1/activities/2", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/activities/2',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"activities",
"attributes":{
"key":"message",
"message":"New text",
"user-ids":[1, 2]
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/activities/2"
payload = json.dumps({
"data":{
"type":"activities",
"attributes":{
"key":"message",
"message":"New text",
"user-ids":[1, 2]
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/activities/2'));
request.body = json.encode({
"data":{
"type":"activities",
"attributes":{
"key":"message",
"message":"New text",
"user-ids":[1, 2]
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | activities |
URL | /api/v1/activities |
Список | GET /api/v1/activities |
Чтение | GET /api/v1/activities/{id} |
Создание | POST /api/v1/activities |
Редактирование | PATCH /api/v1/activities/{id} |
Удаление | DELETE /api/v1/activities/{id} |
Атрибуты
Атрибуты активности
{
"data": {
"type":"activities",
"id":"2",
"attributes":{
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"key": "create",
"confirm-read": null,
"user-ids": [1, 2, 3],
"message": "",
"parameters":{
"changes" : {
"Id" : {
"new_name" : 22,
"old_name" : null,
"field" : "id"
},
"Создатель" : {
"old_id" : null,
"new_name" : "Иван Иванов",
"new_id" : 2,
"old_name" : "",
"field" : "user_id"
},
"Сотрудник" : {
"new_id" : 2,
"old_name" : "",
"field" : "responsible_id",
"new_name" : "Иван Иванов",
"old_id" : null
},
"Тема" : {
"new_name" : "test",
"field" : "name",
"old_name" : null
}
},
"creator" : "Иван Иванов",
"object" : "",
"this" : "test"
}
}
}
}
Основные атрибуты
Имя | Тип | Пример | Запись | Описание | ||
---|---|---|---|---|---|---|
key | string |
Иван | да | Тип активности | ||
parameters | json |
{"editor":"Иван"} | нет | Параметры активности (изменения/описание события) | ||
user-ids | array |
[1, 2, 3] | да | Упомянутые пользователи | ||
confirm-read | boolean|string |
true | '1' | null | да | Уведомлять или нет упомянутых пользователей (только создание) |
message | string |
Текст | нет | Текст примечания |
Связи
Пример данных (перечислены не все связи)
{
"data": {
"type":"activities",
"id":"2",
"relationships":{
"trackable":{
"links":{
"self":"/api/v1/activities/2/relationships/trackable",
"related":"/api/v1/activities/2/trackable"
}
},
"user":{
"links":{
"self":"/api/v1/activities/2/relationships/user",
"related":"/api/v1/activities/2/user"
}
}
}
}
}
Пример запроса с загруженными автором изменения и изменённым объектом
curl "https://app.synergycrm.ru/api/v1/activities?include=user,trackable" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/activities?include=user,trackable");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/activities?include=user,trackable')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/activities?include=user,trackable", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/activities?include=user,trackable',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/activities?include=user,trackable"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/activities?include=user,trackable'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Объект активности | trackable | companies , contacts , deals , entries , orders , diaries , products , estate-properties , users , invoices , invoice-payments |
Автор активности | user | users |
Фильтры
Получить список активностей определённого пользователя
curl -G "https://app.synergycrm.ru/api/v1/activities" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[user_id]=2"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/activities?filter[user_id]=2");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/activities?filter[user_id]=2')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/activities?filter[user_id]=2", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/activities?filter[user_id]=2',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/activities?filter[user_id]=2"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/activities?filter[user_id]=2'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Получить список активностей по определённой компании
curl -G "https://app.synergycrm.ru/api/v1/activities?filter[trackable_type]=companies" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[trackable_id]=2222"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/activities?filter[trackable_type]=companies&filter[trackable_id]=2222");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/activities?filter[trackable_type]=companies&filter[trackable_id]=2222')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/activities?filter[trackable_type]=companies&filter[trackable_id]=2222", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/activities?filter[trackable_type]=companies&filter[trackable_id]=2222',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/activities?filter[trackable_type]=companies&filter[trackable_id]=2222"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/activities?filter[trackable_type]=companies&filter[trackable_id]=2222'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
trackable_type* | Вывести активности по определённому типу ресурса | filter[trackable_type]=contacts |
trackable_id | Вывести активности по идентификатору объекта | filter[trackable_id]=222 |
key** | Вывести активности по определённому типу события | filter[key]=create |
user_id | Вывести активности по определённому пользователю | filter[user_id]=2 |
q | Вывести активности по поисковому запросу | filter[q]=some-query |
* Возможные значения: companies, contacts, deals, entries, orders, diaries, products, estate-properties, users, invoices, invoice-payments.
** Возможные значения: sms_sent, restore, create_invoice, create_invoice_payment, import, diary_action, archive, update, destroy, create.
Параметры
Источник запроса и сценарии автоматизаций
{
"source_id": 2,
"source_type": "api",
"source_name": "Test API Key",
"scenario_id": 22,
"scenario_name": "Автоматизация на закрытие сделок"
}
У всех типов активностей могут быть указаны поля, указывающие на источник запроса. Источником может быть api, мобильное приложение, пользовательские приложения или чат.
Если поля не указаны или null, значит запрос поступил через интерфейс Synergy CRM.
Поле | Описание |
---|---|
source_type |
Тип источника запроса, возможные варианты: api , app , mobile , chat |
source_id |
ID источника запроса, в зависимости от типа может быть id api-ключа или id приложения |
source_name |
Имя приложения, либо название api-ключа |
Аналогично источнику запросов, в параметрах может содержаться информация о сценарии автоматизации, который взаимодействовал с объектом:
Поле | Описание |
---|---|
scenario_id |
ID сценария автоматизации |
scenario_name |
Название сценария автоматизации |
Создание, обновление и удаление (create
, update
, destroy
)
{
"changes" : {
"Фамилия" : {
"field" : "last_name",
"new_name" : "Иванов",
"old_name" : null
},
"ID" : {
"field" : "id",
"old_name" : null,
"new_name" : 2222
},
"Ответственный" : {
"field" : "responsible_id",
"old_id" : null,
"old_name" : "",
"new_name" : "Лазарев Александр",
"new_id" : 222
},
"Создатель" : {
"new_id" : 222,
"new_name" : "Лазарев Александр",
"old_name" : "",
"old_id" : null,
"field" : "user_id"
}
},
"object" : "",
"this" : "Test",
"creator" : "Лазарев Александр"
}
Поле | Описание |
---|---|
changes |
Содержит информацию с изменениями полей объекта |
object |
Имя объекта |
creator |
Имя автора активности |
this |
Имя объекта |
Поля элементов в changes
Именем является наименование поля в самой системе
Поле | Описание |
---|---|
field |
Системное наименование поля |
old_id |
Идентификатор старого связанного объекта |
old_name |
Наименование старого привязанного объекта |
new_id |
Идентификатор нового привязанного объекта |
new_name |
Имя интеграции |
Импорт (import
)
{
"object" : "Contact",
"creator" : "Иванов Иван",
"imported_count" : 2
}
Поле | Описание |
---|---|
object |
Класс импортируемых объектов |
creator |
Имя автора активности |
imported_count |
Количество импортированных объектов |
Экспорт (export
)
{
"mode": "background",
"object": "Diary",
"creator": "Владимир Владимирович",
"exported_count": 2,
"operation_name": "Экспорт \"Задачи\"",
"operation_status": "completed",
"operation_progress": 0
}
Поле | Описание |
---|---|
mode |
Режим экспорта |
object |
Класс экспортируемых объектов |
creator |
Имя автора активности |
exported_count |
Количество экспортированных объектов |
operation_name |
Название операции |
operation_status |
Статус операции |
operation_progress |
Прогресс операции в процентах |
Архивирование и восстановление из архива (archive
, restore
)
{
"this": "Сделка №2",
"creator": "Иванов Иван"
}
Поле | Описание |
---|---|
this |
Имя объекта |
creator |
Имя автора активности |
Примечание (message
)
{
"users": [1, 2, 3],
"confirm-read": true
}
Поле | Описание |
---|---|
users |
Упомянутые пользователи, см. user-ids в атрибутах |
confirm-read |
Уведомлять о прочтении, см. confirm-read в атрибутах |
Создание счета (create_invoice
)
{
"deal" : "Сделка №2",
"amount" : "2222.0",
"number" : 2,
"object": "ООО Хорошая Компания",
"creator" : "Иванов Иван"
}
Поле | Описание |
---|---|
number |
Номер счета |
deal |
Имя сделки |
creator |
Имя автора активности |
amount |
Сумма платежа |
object |
Имя объекта |
Создание платежа (create_invoice_payment
)
{
"deal" : "Сделка №2",
"payer" : "Петров Владимир",
"creator" : "Иванов Андрей",
"receiver" : "ООО \"Хорошая компания\"№22",
"direction" : "income",
"invoice_number" : 222,
"payment_number" : 22222,
"payer_bank_detail" : null,
"receiver_bank_detail" : "ФИЛИАЛ № 2 БАНКА"
}
Поле | Описание |
---|---|
deal |
Имя сделки |
payer |
Имя или название плательщика |
creator |
Имя автора активности |
receiver |
Имя или название получателя |
direction |
Направление платежа |
invoice_number |
Номер счета |
payment_number |
Номер платежа |
payer_bank_detail |
Реквизиты плательщика |
receiver_bank_detail |
Реквизиты получателя |
Отправка СМС (sms_sent
)
{
"dst": "+7 987 654-32-11",
"entity": "Иван Иванов",
"creator": "Владимир Владимирович",
"message": "Уведомление о готовом решении",
"integration": "SigmaSMS"
}
Поле | Описание |
---|---|
dst |
Номер, на который СМС была выслана |
entity |
Имя объекта |
creator |
Имя автора активности |
message |
Содержимое СМС |
integration |
Имя интеграции |
Новые связи и удаление связей (add_association
, remove_association
)
{
"this": "ООО Хорошая Компания",
"creator": "Владимир Владимирович",
"associations": {
"10": "Иван Иванов",
"12": "Михаил Иванов"
},
"association_class": "Contact"
}
Поле | Описание |
---|---|
this |
Имя объекта |
creator |
Имя автора активности |
associations |
Объекты |
association_class |
Тип объектов |
Сообщение чата (create_chat_message
)
{
"author": "Владимир Владимирович",
"message": "Привет!",
"user_avatar": "https://picsum.photos/id/1/200/200",
"conversation_id": 2,
"conversation_name": "Владимир Владимирович"
}
Поле | Описание |
---|---|
author |
Имя автора сообщения |
message |
Текст сообщения |
user_avatar |
Ссылка на аватар |
conversation_id |
id диалога |
conversation_name |
Название диалога |
Новый чеклист / элемент чеклиста (create_checklist
)
{
"this": "Чеклист",
"object": "Задача №2",
"creator": "Владимир Владимирович"
}
Поле | Описание |
---|---|
this |
Имя чеклиста/задачи |
object |
Имя объекта |
creator |
Имя автора активности |
Действие чеклиста (entity_checklist_item_action
)
{
"mode": "finish",
"this": "Элемент чеклиста",
"entity": "deal",
"object": "Сделка №2",
"creator": "Владимир Владимирович"
}
Поле | Описание |
---|---|
this |
Имя задачи чеклиста |
object |
Имя объекта |
creator |
Имя автора активности |
mode |
Действие |
entity |
Тип сущности |
Табличные фильтры
JSON API type | table-states |
URL | /api/v1/table-states |
Список | GET /api/v1/table-states |
Чтение | GET /api/v1/table-states/{id} |
Создание | POST /api/v1/table-states/ |
Обновление | PATCH /api/v1/table-states/{id} |
Удаление | DELETE /api/v1/table-states/{id} |
Атрибуты (Список/чтение)
Ниже приведен пример формата данных, в реальном ответе будут присутствовать все перечисленные атрибуты
{
"data": {
"id": "2",
"type": "table-states",
"attributes": {
"created-at": "2022-02-22T12:22:22.222+03:00",
"updated-at": "2022-02-22T12:22:22.222+03:00",
"class-name": "Company",
"name": "company-table-filter",
"key": "general",
"temp": "true",
"data": {
"fields": [
"name",
"bank_number",
"email",
"city",
"responsible",
"contacts",
"street",
"custom_2"
],
"search_conditions": {
"city": "Moscow"
}
}
}
}
}
Основные атрибуты
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name | string |
"company-table-filter" |
да | Название фильтра |
class-name | string |
"Company" |
да | Класс фильтра |
key | string |
"general" |
да | Ключ таблицы ("general" - основная таблица, "contacts" - таблица карточки Контакты) |
temp | boolean |
"true" |
да | Флаг, сигнализирующий о том, что данные поля используются в текущий момент |
data | hash |
{"fields": ["number", "created_at"} |
да | Отображаемые поля и условия выборки |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список табличных фильтров из карточки Сделок
curl -G "https://app.synergycrm.ru/api/v1/table-states" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[key]=deals"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/table-states?filter[key]=deals");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/table-states?filter[key]=deals')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/table-states?filter[key]=deals", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/table-states?filter[key]=deals',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/table-states?filter[key]=deals"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/table-states?filter[key]=deals'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
key | Вывести табличные фильтры по определенному ключу | filter[key]=general |
class-name | Вывести табличные фильтры по определенному классу | filter[class-name]=Deals |
temp | Вывести табличные фильтры с текущими полями | filter[temp]=true |
Атрибуты (создание/обновление)
Ниже приведен пример формата данных, в реальном ответе будут присутствовать все перечисленные атрибуты
{
"data": {
"id": "2",
"type": "table-states",
"links": {
"self": "https://app.synergycrm.ru/api/v1/table-states/1"
},
"attributes": {
"created-at": "2022-02-22T12:22:22.222+03:00",
"updated-at": "2022-02-22T12:22:22.222+03:00",
"cached-at": "2022-02-22T12:22:22.222+03:00",
"class-name": "Company",
"name": "company-table-filter",
"key": "general",
"temp": "true",
"data": {
"fields": [
"name",
"bank_number",
"email",
"city",
"responsible",
"contacts",
"street",
"custom_2"
],
"search_conditions": {
"city": "Moscow"
},
"order_conditions": {
"created_at": "desc"
},
"search_conditions": {
"age": "",
"website": "only_null"
},
"group_conditions": {}
},
"color": "#383e94",
"search-conditions": {
"age": "",
"website": "only_null"
},
"order-conditions": {
"created_at": "desc"
},
"group-conditions": {},
"fields": [
"name",
"bank_number",
"email",
"city",
"responsible",
"contacts",
"street",
"custom_2"
]
}
}
}
Создать табличный фильтр пример на CURL
curl -X "POST" "https://app.synergycrm.ru/api/v1/table-states" \
-H 'Authorization: Bearer api_token' \
-H 'Content-Type: application/vnd.api+json' \
-d $'{
"data": {
"type": "table_states",
"attributes": {
"fields": [
"name"
],
"color": "hsl(236,+45%,+40%)",
"search-conditions": {
"name": "only_null"
},
"order-conditions": {
"created_at": "desc"
},
"class-name": "Company",
"group-conditions": {},
"name": "Новый фильтр"
}
}
}'
Обновить табличный фильтр пример на CURL
curl -X "PATCH" "http://localhost:3000/api/v1/table-states/{id}" \
-H 'Authorization: Bearer api_token' \
-H 'Content-Type: application/vnd.api+json' \
-d $'{
"data": {
"type": "table_states",
"attributes": {
"fields": [
"name",
"street"
],
"color": "hsl(236,+45%,+40%)",
"search-conditions": {
"name": "only_null",
"street": "only_null"
},
"order-conditions": {
"created_at": "desc"
},
"class-name": "Company",
"group-conditions": {},
"name": "Новый фильтр"
}
}
}'
Пример создания на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/table-states");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"attributes\":{\"fields\":[\"name\",\"street\"],\"color\":\"hsl(236,+45%,+40%)\",\"search-conditions\":{\"name\":\"only_null\",\"street\":\"only_null\"},\"order-conditions\":{\"created_at\":\"desc\"},\"class-name\":\"Company\",\"group-conditions\":{},\"name\":\"Новый фильтр\"}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример обновления на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/table-states/{id}");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("PATCH");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"attributes\":{\"fields\":[\"name\",\"street\"],\"color\":\"hsl(236,+45%,+40%)\",\"search-conditions\":{\"name\":\"only_null\",\"street\":\"only_null\"},\"order-conditions\":{\"created_at\":\"desc\"},\"class-name\":\"Company\",\"group-conditions\":{},\"name\":\"Новый фильтр\"}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример создания на Ruby
require 'net/http'
require 'net/https'
require 'json'
def send_request
uri = URI('https://app.synergycrm.ru/api/v1/table-states')
# Create client
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
dict = {
"data" => {
"type" => "table_states",
"attributes" => {
"fields" => [
"name",
"street"
],
"color" => "hsl(236,+45%,+40%)",
"search-conditions" => {
"street" => "only_null",
"name" => "only_null"
},
"order-conditions" => {
"created_at" => "desc"
},
"class-name" => "Company",
"group-conditions" => {
},
"name" => "некий фильтр"
}
}
}
body = JSON.dump(dict)
# Create Request
req = Net::HTTP::Post.new(uri)
# Add headers
req.add_field "Authorization", "Bearer api_token"
# Add headers
req.add_field "Content-Type", "application/vnd.api+json"
# Set body
req.body = body
# Fetch Request
res = http.request(req)
puts "Response HTTP Status Code: #{res.code}"
puts "Response HTTP Response Body: #{res.body}"
rescue StandardError => e
puts "HTTP Request failed (#{e.message})"
end
Пример обновления на Ruby
require 'net/http'
require 'net/https'
require 'json'
def send_request
uri = URI('https://app.synergycrm.ru/api/v1/table-states/{id}')
# Create client
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
dict = {
"data" => {
"type" => "table_states",
"id" => "{id}",
"attributes" => {
"fields" => [
"name",
"street"
],
"color" => "hsl(236,+45%,+40%)",
"search-conditions" => {
"street" => "only_null",
"name" => "only_null"
},
"order-conditions" => {
"created_at" => "desc"
},
"class-name" => "Company",
"group-conditions" => {
},
"name" => "некий фильтр"
}
}
}
body = JSON.dump(dict)
# Create Request
req = Net::HTTP::Patch.new(uri)
# Add headers
req.add_field "Authorization", "Bearer api_token"
# Add headers
req.add_field "Content-Type", "application/vnd.api+json"
# Set body
req.body = body
# Fetch Request
res = http.request(req)
puts "Response HTTP Status Code: #{res.code}"
puts "Response HTTP Response Body: #{res.body}"
rescue StandardError => e
puts "HTTP Request failed (#{e.message})"
end
Пример создания на GO
package main
import (
"fmt"
"io"
"net/http"
"bytes"
)
func sendApiV1TablestatescontrollerPost() {
json := []byte(`{"data": {"type": "table_states","attributes": {"fields": ["name","street"],"color": "hsl(236,+45%,+40%)","search-conditions": {"street": "only_null","name": "only_null"},"order-conditions": {"created_at": "desc"},"class-name": "Company","group-conditions": {},"name": "некий фильтр"}}}`)
body := bytes.NewBuffer(json)
// Create client
client := &http.Client{}
// Create request
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/table-states", body)
// Headers
req.Header.Add("Authorization", "Bearer api_token")
req.Header.Add("Content-Type", "application/vnd.api+json")
// Fetch Request
resp, err := client.Do(req)
if err != nil {
fmt.Println("Failure : ", err)
}
// Read Response Body
respBody, _ := io.ReadAll(resp.Body)
// Display Results
fmt.Println("response Status : ", resp.Status)
fmt.Println("response Headers : ", resp.Header)
fmt.Println("response Body : ", string(respBody))
}
Пример обновления на GO
package main
import (
"fmt"
"io"
"net/http"
"bytes"
)
func sendApiV1TablestatescontrollerPost() {
json := []byte(`{"data": {"type": "table_states","id": "{id}","attributes": {"fields": ["name","street"],"color": "hsl(236,+45%,+40%)","search-conditions": {"street": "only_null","name": "only_null"},"order-conditions": {"created_at": "desc"},"class-name": "Company","group-conditions": {},"name": "некий фильтр"}}}`)
body := bytes.NewBuffer(json)
// Create client
client := &http.Client{}
// Create request
req, err := http.NewRequest("PATCH", "https://app.synergycrm.ru/api/v1/table-states/{id}", body)
// Headers
req.Header.Add("Authorization", "Bearer api_token")
req.Header.Add("Content-Type", "application/vnd.api+json")
// Fetch Request
resp, err := client.Do(req)
if err != nil {
fmt.Println("Failure : ", err)
}
// Read Response Body
respBody, _ := io.ReadAll(resp.Body)
// Display Results
fmt.Println("response Status : ", resp.Status)
fmt.Println("response Headers : ", resp.Header)
fmt.Println("response Body : ", string(respBody))
}
Пример создания на PHP
<?php
// get cURL resource
$ch = curl_init();
// set url
curl_setopt($ch, CURLOPT_URL, 'https://app.synergycrm.ru/api/v1/table-states');
// set method
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
// return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// set headers
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer api_token',
'Content-Type: application/vnd.api+json',
]);
// json body
$json_array = [
'data' => [
'type' => 'table_states',
'attributes' => [
'fields' => [
'name',
'street'
],
'color' => 'hsl(236,+45%,+40%)',
'search-conditions' => [
'street' => 'only_null',
'name' => 'only_null'
],
'order-conditions' => [
'created_at' => 'desc'
],
'class-name' => 'Company',
'group-conditions' => [
],
'name' => 'некий фильтр'
]
]
];
$body = json_encode($json_array);
// set body
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
// send the request and save response to $response
$response = curl_exec($ch);
// stop if fails
if (!$response) {
die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch));
}
echo 'HTTP Status Code: ' . curl_getinfo($ch, CURLINFO_HTTP_CODE) . PHP_EOL;
echo 'Response Body: ' . $response . PHP_EOL;
// close curl resource to free up system resources
curl_close($ch);
Пример обновления на PHP
<?php
// get cURL resource
$ch = curl_init();
// set url
curl_setopt($ch, CURLOPT_URL, 'https://app.synergycrm.ru/api/v1/table-states/{id}');
// set method
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
// return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// set headers
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer api_token',
'Content-Type: application/vnd.api+json',
]);
// json body
$json_array = [
'data' => [
'type' => 'table_states',
'id' => '{id}',
'attributes' => [
'fields' => [
'name',
'street'
],
'color' => 'hsl(236,+45%,+40%)',
'search-conditions' => [
'street' => 'only_null',
'name' => 'only_null'
],
'order-conditions' => [
'created_at' => 'desc'
],
'class-name' => 'Company',
'group-conditions' => [
],
'name' => 'некий фильтр'
]
]
];
$body = json_encode($json_array);
// set body
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
// send the request and save response to $response
$response = curl_exec($ch);
// stop if fails
if (!$response) {
die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch));
}
echo 'HTTP Status Code: ' . curl_getinfo($ch, CURLINFO_HTTP_CODE) . PHP_EOL;
echo 'Response Body: ' . $response . PHP_EOL;
// close curl resource to free up system resources
curl_close($ch);
Пример создания на Python
import requests
import json
def send_request():
try:
response = requests.post(
url="https://app.synergycrm.ru/api/v1/table-states",
headers={
"Authorization": "Bearer api_token",
"Content-Type": "application/vnd.api+json",
},
data=json.dumps({
"data": {
"type": "table_states",
"attributes": {
"fields": [
"name",
"street"
],
"color": "hsl(236,+45%,+40%)",
"search-conditions": {
"street": "only_null",
"name": "only_null"
},
"order-conditions": {
"created_at": "desc"
},
"class-name": "Company",
"group-conditions": {
},
"name": "некий фильтр"
}
}
})
)
print('Response HTTP Status Code: {status_code}'.format(
status_code=response.status_code))
print('Response HTTP Response Body: {content}'.format(
content=response.content))
except requests.exceptions.RequestException:
print('HTTP Request failed')
Пример обновления на Python
import requests
import json
def send_request():
try:
response = requests.patch(
url="https://app.synergycrm.ru/api/v1/table-states/{id}",
headers={
"Authorization": "Bearer api_token",
"Content-Type": "application/vnd.api+json",
},
data=json.dumps({
"data": {
"type": "table_states",
"id": "{id}",
"attributes": {
"fields": [
"name",
"street"
],
"color": "hsl(236,+45%,+40%)",
"search-conditions": {
"street": "only_null",
"name": "only_null"
},
"order-conditions": {
"created_at": "desc"
},
"class-name": "Company",
"group-conditions": {
},
"name": "некий фильтр"
}
}
})
)
print('Response HTTP Status Code: {status_code}'.format(
status_code=response.status_code))
print('Response HTTP Response Body: {content}'.format(
content=response.content))
except requests.exceptions.RequestException:
print('HTTP Request failed')
Пример создания на Dart
// import http package
import 'package:http/http.dart' as http;
send_request() async {
var url = "https://app.synergycrm.ru/api/v1/table-states";
// Create request
var request = http.Request('POST', Uri.parse(url));
// Add headers
headers={
"Authorization": "Bearer api_token",
"Content-Type": "application/vnd.api+json",
},
request.headers.addAll(headers);
// Set body
request.body = json.encode({
"data" : {
"type" : "table_states",
"attributes" : {
"fields" : [
"name",
"street"
],
"color" : "hsl(236,+45%,+40%)",
"search-conditions" : {
"street" : "only_null",
"name" : "only_null"
},
"order-conditions" : {
"created_at" : "desc"
},
"class-name" : "Company",
"group-conditions" : {
},
"name" : "некий фильтр"
}
}
});
// Fetch Request
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
debugPrint(await response.stream.bytesToString());
}
else {
debugPrint(response.reasonPhrase);
}
}
Пример обновления на Dart
// import http package
import 'package:http/http.dart' as http;
send_request() async {
var url = "https://app.synergycrm.ru/api/v1/table-states/{id}";
// Create request
var request = http.Request('PATCH', Uri.parse(url));
// Add headers
headers={
"Authorization": "Bearer api_token",
"Content-Type": "application/vnd.api+json",
},
request.headers.addAll(headers);
// Set body
request.body = json.encode({
"data" : {
"type" : "table_states",
"id" : "{id}",
"attributes" : {
"fields" : [
"name",
"street"
],
"color" : "hsl(236,+45%,+40%)",
"search-conditions" : {
"street" : "only_null",
"name" : "only_null"
},
"order-conditions" : {
"created_at" : "desc"
},
"class-name" : "Company",
"group-conditions" : {
},
"name" : "некий фильтр"
}
}
});
// Fetch Request
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
debugPrint(await response.stream.bytesToString());
}
else {
debugPrint(response.reasonPhrase);
}
}
Удаление
Удалить табличный фильтр пример на CURL
curl -X "DELETE" "http://localhost:3000/api/v1/table-states/{id}" \
-H 'Authorization: Bearer api_token' \
-H 'Content-Type: application/vnd.api+json'
Пример удаления на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/table-states/{id}");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("DELETE");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример удаления на Ruby
require 'net/http'
require 'net/https'
require 'json'
def send_request
uri = URI('https://app.synergycrm.ru/api/v1/table-states/{id}')
# Create client
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
# Create Request
req = Net::HTTP::Delete.new(uri)
# Add headers
req.add_field "Authorization", "Bearer api_token"
# Add headers
req.add_field "Content-Type", "application/vnd.api+json"
# Fetch Request
res = http.request(req)
puts "Response HTTP Status Code: #{res.code}"
puts "Response HTTP Response Body: #{res.body}"
rescue StandardError => e
puts "HTTP Request failed (#{e.message})"
end
Пример удаления на GO
package main
import (
"fmt"
"io"
"net/http"
"bytes"
)
func sendApiV1TablestatescontrollerPost() {
json := []byte(`{}`)
body := bytes.NewBuffer(json)
// Create client
client := &http.Client{}
// Create request
req, err := http.NewRequest("DELETE", "https://app.synergycrm.ru/api/v1/table-states/{id}", body)
// Headers
req.Header.Add("Authorization", "Bearer api_token")
req.Header.Add("Content-Type", "application/vnd.api+json")
// Fetch Request
resp, err := client.Do(req)
if err != nil {
fmt.Println("Failure : ", err)
}
// Read Response Body
respBody, _ := io.ReadAll(resp.Body)
// Display Results
fmt.Println("response Status : ", resp.Status)
fmt.Println("response Headers : ", resp.Header)
fmt.Println("response Body : ", string(respBody))
}
Пример удаления на PHP
<?php
// get cURL resource
$ch = curl_init();
// set url
curl_setopt($ch, CURLOPT_URL, 'https://app.synergycrm.ru/api/v1/table-states/{id}');
// set method
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
// return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// set headers
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer api_token',
'Content-Type: application/vnd.api+json',
]);
// send the request and save response to $response
$response = curl_exec($ch);
// stop if fails
if (!$response) {
die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch));
}
echo 'HTTP Status Code: ' . curl_getinfo($ch, CURLINFO_HTTP_CODE) . PHP_EOL;
echo 'Response Body: ' . $response . PHP_EOL;
// close curl resource to free up system resources
curl_close($ch);
Пример удаления на Python
import requests
import json
def send_request():
try:
response = requests.delete(
url="https://app.synergycrm.ru/api/v1/table-states/{id}",
headers={
"Authorization": "Bearer api_token",
"Content-Type": "application/vnd.api+json",
}
)
print('Response HTTP Status Code: {status_code}'.format(
status_code=response.status_code))
print('Response HTTP Response Body: {content}'.format(
content=response.content))
except requests.exceptions.RequestException:
print('HTTP Request failed')
Пример удаления на Dart
// import http package
import 'package:http/http.dart' as http;
send_request() async {
var url = "https://app.synergycrm.ru/api/v1/table-states/{id}";
// Create request
var request = http.Request('DELETE', Uri.parse(url));
// Add headers
headers={
"Authorization": "Bearer api_token",
"Content-Type": "application/vnd.api+json",
},
request.headers.addAll(headers);
// Fetch Request
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
debugPrint(await response.stream.bytesToString());
}
else {
debugPrint(response.reasonPhrase);
}
}
Файлы
JSON API type | documents |
URL | /api/v1/documents |
Список | GET /api/v1/documents |
Чтение | GET /api/v1/documents/{id} |
Удаление | DELETE /api/v1/documents/{id} |
Атрибуты
Ниже приведен пример формата данных, в реальном ответе будут присутствовать все перечисленные атрибуты
{
"data": {
"id": "2",
"type": "documents",
"links": {
"self": "http://app.synergycrm.ru/api/v1/documents/2"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "example.jpg",
"size": "22222.0",
"download-link": "https://example-link",
"content-type": "image/jpeg"
}
}
}
Основные атрибуты
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name | string |
"example.jpg" |
да | Название файла |
size | string |
"103820.0" |
да | Размер файла |
download-link | string |
"https://example-link" |
нет | Ссылка для скачивания |
content-type | string |
"image/jpeg" |
нет | Тип файла |
created-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:02:22.222+03:00 |
нет | Дата обновления |
cached-at | datetime |
2022-02-22T12:02:22.222+03:00 |
Нет | Закэшировано |
* Обязательные поля
Связи
Пример данных (перечислены не все связи)
{
"data": {
"id": "2",
"type": "documents",
"links": {
"self": "http://app.synergycrm.ru/api/v1/documents/2"
},
"relationships": {
"company": {
"links": {
"self": "http://app.synergycrm.ru/api/v1/documents/2/relationships/company",
"related": "http://app.synergycrm.ru/api/v1/documents/2/company"
}
},
"contact": {
"links": {
"self": "http://app.synergycrm.ru/api/v1/documents/2/relationships/contact",
"related": "http://app.synergycrm.ru/api/v1/documents/2/contact"
}
},
"category":{
"links":{
"self":"/api/v1/documents/2/relationships/category",
"related":"/api/v1/documents/2/category"
}
}
}
}
}
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Создатель | user | users |
Компания | company | companies |
Контакт | contact | contacts |
Задача | diary | diary |
Сделки | deals | deals |
Заявки | orders | orders |
Продукты | products | products |
Обложка продукта | product-covers | product-covers |
Категория | category | document-categories |
Фильтры
Получить список документов по определённой компании
curl -G "https://app.synergycrm.ru/api/v1/documents?filter[entity_type]=Company?filter[entity_id]=2" \
-X GET \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/documents?filter[entity_type]=Company?filter[entity_id]=2");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/documents?filter[entity_type]=Company?filter[entity_id]=2')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/documents?filter[entity_type]=Company?filter[entity_id]=2", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/documents?filter[entity_type]=Company?filter[entity_id]=2',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/documents?filter[entity_type]=Company?filter[entity_id]=2"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/documents?filter[entity_type]=Company?filter[entity_id]=2'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
entity_type* | Вывести документы по определённому типу ресурса | filter[entity_type]=Contact |
entity_id** | Вывести документы по идентификатору объекта | filter[entity_id]=2 |
content-type | Вывести документы по типу файла | filter[content-type]=image/jpeg |
* Возможные значения: Company
, Contact
, Deal
, Order
, User
, Diary
, Product
, EstateProperty
, Checkup
, Contract
, Activity
.
** Фильтры entity_type и entity_id можно использовать только вместе. В фильтре должен быть указан только один параметр (1 класс и 1 id).
Типы
Создание типа документа
curl "https://app.synergycrm.ru/api/v1/document-types" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"document-types",
"attributes":{
"name":"Новый тип документа",
"active":true
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/document-types");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"document-types\",\"attributes\":{\"name\":\"Новый тип документа\",\"active\":true}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/document-types')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"document-types",
"attributes":{
"name":"Новый тип документа",
"active":true
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"document-types",
"attributes":{
"name":"Новый тип документа",
"active":true
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/document-types", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/document-types',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"document-types",
"attributes":{
"name":"Новый тип документа",
"active":true
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/document-types"
payload = json.dumps({
"data":{
"type":"document-types",
"attributes":{
"name":"Новый тип документа",
"active":true
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/document-types'));
request.body = json.encode({
"data":{
"type":"document-types",
"attributes":{
"name":"Новый тип документа",
"active":true
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | document-types |
URL | /api/v1/document-types |
Список | GET /api/v1/document-types |
Чтение | GET /api/v1/document-types/{id} |
Создание | POST /api/v1/document-types |
Редактирование | PATCH /api/v1/document-types/{id} |
Удаление | DELETE /api/v1/document-types/{id} |
Атрибуты
Атрибуты типа документа
{
"data": {
"type":"document-types",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name": "Мой тип документа",
"active":true
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Мой тип документа | да | Имя типа документа |
active | boolean |
true | да | Активность типа документа |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список типов документов созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/document-types" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/document-types?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/document-types?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/document-types?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/document-types?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/document-types?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/document-types?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести типы документов, созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести типы документов, созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести типы документов, обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести типы документов, обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Трекинг рабочего времени пользователя
Создание рабочего времени
curl "https://app.synergycrm.ru/api/v1/user-work-times" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"user-work-times",
"attributes":{
"started-at":"2022-02-22T12:22:22.222+03:00",
"finished-at":"2022-02-22T12:22:22.222+03:00"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/user-work-times");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"user-work-times\",\"attributes\":{\"started-at\":\"2022-02-22T12:22:22.222+03:00\",\"finished-at\":\"2022-02-22T12:22:22.222+03:00\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/user-work-times')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"user-work-times",
"attributes":{
"started-at":"2022-02-22T12:22:22.222+03:00", "finished-at":"2022-02-22T12:22:22.222+03:00"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"user-work-times",
"attributes":{
"started-at":"2022-02-22T12:22:22.222+03:00", "finished-at":"2022-02-22T12:22:22.222+03:00"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/user-work-times", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/user-work-times',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"user-work-times",
"attributes":{
"started-at":"2022-02-22T12:22:22.222+03:00", "finished-at":"2022-02-22T12:22:22.222+03:00"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/user-work-times"
payload = json.dumps({
"data":{
"type":"user-work-times",
"attributes":{
"started-at":"2022-02-22T12:22:22.222+03:00", "finished-at":"2022-02-22T12:22:22.222+03:00"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/user-work-times'));
request.body = json.encode({
"data":{
"type":"user-work-times",
"attributes":{
"started-at":"2022-02-22T12:22:22.222+03:00", "finished-at":"2022-02-22T12:22:22.222+03:00"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | user-work-times |
URL | /api/v1/user-work-times |
Список | GET /api/v1/user-work-times |
Чтение | GET /api/v1/user-work-times/{id} |
Создание | POST /api/v1/user-work-times |
Редактирование | PATCH /api/v1/user-work-times/{id} |
Удаление | DELETE /api/v1/user-work-times/{id} |
Атрибуты
Атрибуты рабочего времени сотрудника
{
"data": {
"type":"user-work-times",
"id":"2",
"attributes":{
"started-at":"2022-02-22T12:22:22.222+03:00",
"finished-at":"2022-02-22T12:22:22.222+03:00",
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
started-at | datetime |
2016-11-26T12:07:51.572+03:00 |
да | Провайдер телефонии |
finished-at | datetime |
2016-11-26T12:07:51.572+03:00 |
да | Дата окончания рабочего времени |
created-at | datetime |
2016-11-26T12:07:51.572+03:00 |
да | Дата создания |
updated-at | datetime |
2016-11-26T12:07:51.572+03:00 |
нет | Дата обновления |
Фильтры
Получить список учтённого рабочего времени по определённому пользователю
curl -G "https://app.synergycrm.ru/api/v1/user-work-times?filter[user-id]=2" \
-X GET \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/user-work-times?filter[user-id]=2");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/user-work-times?filter[user-id]=2')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/user-work-times?filter[user-id]=2", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/user-work-times?filter[user-id]=2',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/user-work-times?filter[user-id]=2"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Фильтр | Описание | Пример |
---|---|---|
user-id | Вывести записи о рабочем времени созданные определённым пользователем | filter[user-id]=2 |
started-at-gte | Вывести записи о рабочем времени созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
started-at-lte | Вывести записи о рабочем времени созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
finished-at-gte | Вывести записи о рабочем времени созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
finished-at-lte | Вывести записи о рабочем времени созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
created-at-gte | Вывести записи о рабочем времени созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести записи о рабочем времени созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести записи о рабочем времени обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести записи о рабочем времени обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
finished-at-null | Вывести незавершенные объекты | filter[finished-at-null]=true |
Загрузка файлов
Загрузка файлов происходит в два действия: Сначала нужно запросить временные ключи по адресу https://upload.app.synergycrm.ru/ и, после, отправить файл с ключами по адресу хранилища.
Получение временных ключей
Получение ключей и адреса для загрузки файла
curl "https://upload.app.synergycrm.ru/api/v1/files" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"type": "files",
"data": {
"filename": "document.docx",
"resource-type": "contacts",
"resource-id": 2
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://upload.app.synergycrm.ru/api/v1/files");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"type\": \"files\",\"data\": {\"filename\": \"document.docx\",\"resource-type\": \"contacts\",\"resource-id\":2}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://upload.app.synergycrm.ru/api/v1/files')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"type": "files",
"data": {
"filename": "document.docx",
"resource-type": "contacts",
"resource-id": 2
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"type": "files",
"data": {
"filename": "document.docx",
"resource-type": "contacts",
"resource-id": 2
}
}`)
req, err := http.NewRequest("POST", "https://upload.app.synergycrm.ru/api/v1/files", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => '',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = ""
payload = json.dumps()
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://upload.app.synergycrm.ru/api/v1/files'));
request.body = json.encode({
"type": "files",
"data": {
"filename": "document.docx",
"resource-type": "contacts",
"resource-id": 2
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | files |
URL | /api/v1/files |
Создание | POST /api/v1/files |
Атрибуты
Тело запроса
{
"type": "files",
"data": {
"filename": "document.docx",
"resource-type": "contacts",
"resource-id": 2
}
}
Тело ответа
{
"type": "files",
"data": {
"url": "https://storage.yandexcloud.net/synergycrm2-production/",
"form-fields": {
"acl": "public-read",
"key": "documents/api/document.docx",
"Expires": "Thu, 10 Nov 2019 09:00:00 GMT",
"policy": "generated-policy",
"x-amz-credential": "AWS1SIMPLECRED/20191114/eu-west-1/s3/aws4_request",
"x-amz-algorithm": "AWS4-HMAC-SHA256",
"x-amz-date": "20191114T130410Z",
"x-amz-signature": "generated-credential"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
filename | string |
document.txt |
да | Название файла |
resource-type | string |
contacts |
да | Ресурс, в который должен быть добавлен файл ((contacts, companies, deals, orders, products)) |
resource-id | integer |
2 | да | Идентификатор объекта, в который должен быть добавлен файл |
url | string |
https://storage.yandexcloud.net/synergycrm2-production/ |
нет | URL для загрузки файла |
form-fields* | object |
{ "acl": "public-read" } | нет | Временные данные, которые должны быть переданы отдельными полями вместо с файлом по "url" |
* Время жизни ключей 5 минут с момента запроса, лимит на размер файла - 10 мегабайт.
Загрузка файлов в хранилище
Пример загрузки файла с помощью cURL
curl -X POST \
https://storage.yandexcloud.net/synergycrm2-production/ \
-H "Content-Type: multipart/form-data" \
-F "key=documents/api/hash/document.txt" \
-F "Expires=Thu, 10 Nov 2019 09:00:00 GMT" \
-F "acl=public-read" \
-F "policy=generated-policy" \
-F "x-amz-credential=generated-cred/20191114/eu-west-1/s3/aws4_request" \
-F "x-amz-algorithm=AWS4-HMAC-SHA256" \
-F "x-amz-date=20191114T130420Z" \
-F "x-amz-signature=amz-signature" \
-F file=@/path/to/file
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://storage.yandexcloud.net/synergycrm2-production/");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "multipart/form-data");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://storage.yandexcloud.net/synergycrm2-production/')
req = Net::HTTP::Post.new(uri)
req.set_form(
[
[
'key',
'documents/api/hash/document.txt'
],
[
'Expires',
'Thu, 10 Nov 2019 09:00:00 GMT'
],
[
'acl',
'public-read'
],
[
'policy',
'generated-policy'
],
[
'x-amz-credential',
'generated-cred/20191114/eu-west-1/s3/aws4_request'
],
[
'x-amz-algorithm',
'AWS4-HMAC-SHA256'
],
[
'x-amz-date',
'20191114T130420Z'
],
[
'x-amz-signature',
'amz-signature'
],
[
'file',
File.open('/path/to/file')
]
],
'multipart/form-data'
)
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("POST", "https://storage.yandexcloud.net/synergycrm2-production/", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "multipart/form-data")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://storage.yandexcloud.net/synergycrm2-production/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type' => 'multipart/form-data',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
'key' => 'documents/api/hash/document.txt',
'Expires' => 'Thu, 10 Nov 2019 09:00:00 GMT',
'acl' => 'public-read',
'policy' => 'generated-policy',
'x-amz-credential' => 'generated-cred/20191114/eu-west-1/s3/aws4_request',
'x-amz-algorithm' => 'AWS4-HMAC-SHA256',
'x-amz-date' => '20191114T130420Z',
'x-amz-signature' => 'amz-signature',
'file' => new CURLFile('/path/to/file'),
]);
$response = curl_exec($ch);
curl_close($ch);
Пример на Python
import requests
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
files = {
'key': (None, 'documents/api/hash/document.txt'),
'Expires': (None, 'Thu, 10 Nov 2019 09:00:00 GMT'),
'acl': (None, 'public-read'),
'policy': (None, 'generated-policy'),
'x-amz-credential': (None, 'generated-cred/20191114/eu-west-1/s3/aws4_request'),
'x-amz-algorithm': (None, 'AWS4-HMAC-SHA256'),
'x-amz-date': (None, '20191114T130420Z'),
'x-amz-signature': (None, 'amz-signature'),
'file': open('/path/to/file', 'rb'),
}
response = requests.post('https://storage.yandexcloud.net/synergycrm2-production/', headers=headers, files=files)
Пример на Dart
import 'package:http/http.dart' as http;
void main() async {
var url = Uri.parse('https://storage.yandexcloud.net/synergycrm2-production/');
var req = new http.MultipartRequest('POST', url)
..fields['key'] = 'documents/api/hash/document.txt'
..fields['Expires'] = 'Thu, 10 Nov 2019 09:00:00 GMT'
..fields['acl'] = 'public-read'
..fields['policy'] = 'generated-policy'
..fields['x-amz-credential'] = 'generated-cred/20191114/eu-west-1/s3/aws4_request'
..fields['x-amz-algorithm'] = 'AWS4-HMAC-SHA256'
..fields['x-amz-date'] = '20191114T130420Z'
..fields['x-amz-signature'] = 'amz-signature'
..files.add(await http.MultipartFile.fromPath(
'file', '/path/to/file'))
req.headers['Content-Type'] = 'multipart/form-data';
var res = await req.send();
if (res.statusCode != 200) throw Exception('http.post error: statusCode= ${res.statusCode}');
print(res.body);
}
После полученных ключей необходимо послать документ на файловое хранилище. Все поля из form-fields
должны быть переданы как поля формы. В отличие от остальных запросов, этот должен иметь заголовок Content-Type: multipart/form-data
.
UTM-метки (устарел)
* Данный ресурс устарел и больше не поддерживается. Необходимо информацию о UTM метках компаний, сделок и заявок помещать в атрибуты самого объекта, в момент его создания или редактирования.
Создание UTM-метки
curl "https://app.synergycrm.ru/api/v1/utm-labels" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"utm-labels",
"attributes":{
"campaign": "discount",
"medium": "email",
"source": "synergycrm"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/utm-labels");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"utm-labels\",\"attributes\":{\"campaign\": \"discount\",\"medium\": \"email\",\"source\":\"synergycrm\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/utm-labels')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"utm-labels",
"attributes":{
"campaign": "discount",
"medium": "email",
"source": "synergycrm"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"utm-labels",
"attributes":{
"campaign": "discount",
"medium": "email",
"source": "synergycrm"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/utm-labels", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/utm-labels',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"utm-labels",
"attributes":{
"campaign": "discount",
"medium": "email",
"source": "synergycrm"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/utm-labels"
payload = json.dumps({
"data":{
"type":"utm-labels",
"attributes":{
"campaign": "discount",
"medium": "email",
"source": "synergycrm"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/utm-labels'));
request.body = json.encode({
"data":{
"type":"utm-labels",
"attributes":{
"campaign": "discount",
"medium": "email",
"source": "synergycrm"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Создание UTM-метки с привязанным контактом, заявкой и звонком
curl "https://app.synergycrm.ru/api/v1/utm-labels" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"utm-labels",
"attributes":{
"source": "synergy",
"campaign": "discount",
"medium": "email",
"content": "link",
"term": "-30%"
},
"relationships": {
"contacts": {
"data": [
{
"type":"contacts",
"id":2
}
]
},
"telephony-calls": {
"data": [
{
"type": "telephony-calls",
"id": 2
}
]
},
"orders": {
"data": [
{
"type": "orders",
"id": 2
}
]
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/utm-labels");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"utm-labels\",\"attributes\":{\"source\": \"synergy\",\"campaign\": \"discount\",\"medium\":\"email\",\"content\": \"link\",\"term\": \"-30%\"},\"relationships\": {\"contacts\": {\"data\": [{\"type\":\"contacts\",\"id\":2}]},\"telephony-calls\": {\"data\": [{\"type\": \"telephony-calls\",\"id\": 2}]},\"orders\": {\"data\": [{\"type\": \"orders\",\"id\": 2}]}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/utm-labels')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"utm-labels",
"attributes":{
"source": "synergy",
"campaign": "discount",
"medium": "email",
"content": "link",
"term": "-30%"
},
"relationships": {
"contacts": {
"data": [ {
"type":"contacts",
"id":2
} ]
},
"telephony-calls": {
"data": [ {
"type": "telephony-calls",
"id": 2
} ]
},
"orders": {
"data": [ {
"type": "orders",
"id":2
} ]
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"utm-labels",
"attributes":{
"source": "synergy",
"campaign": "discount",
"medium": "email",
"content": "link",
"term": "-30%"
},
"relationships": {
"contacts": {
"data": [ {
"type":"contacts",
"id":2
} ]
},
"telephony-calls": {
"data": [ {
"type": "telephony-calls",
"id": 2
} ]
},
"orders": {
"data": [ {
"type": "orders",
"id":2
} ]
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/utm-labels", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/utm-labels',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"utm-labels",
"attributes":{
"source": "synergy",
"campaign": "discount",
"medium": "email",
"content": "link",
"term": "-30%"
},
"relationships": {
"contacts": {
"data": [ {
"type":"contacts",
"id":2
} ]
},
"telephony-calls": {
"data": [ {
"type": "telephony-calls",
"id": 2
} ]
},
"orders": {
"data": [ {
"type": "orders",
"id":2
} ]
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/utm-labels"
payload = json.dumps({
"data":{
"type":"utm-labels",
"attributes":{
"source": "synergy",
"campaign": "discount",
"medium": "email",
"content": "link",
"term": "-30%"
},
"relationships": {
"contacts": {
"data": [ {
"type":"contacts",
"id":2
} ]
},
"telephony-calls": {
"data": [ {
"type": "telephony-calls",
"id": 2
} ]
},
"orders": {
"data": [ {
"type": "orders",
"id":2
} ]
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/utm-labels'));
request.body = json.encode({
"data":{
"type":"utm-labels",
"attributes":{
"source": "synergy",
"campaign": "discount",
"medium": "email",
"content": "link",
"term": "-30%"
},
"relationships": {
"contacts": {
"data": [ {
"type":"contacts",
"id":2
} ]
},
"telephony-calls": {
"data": [ {
"type": "telephony-calls",
"id": 2
} ]
},
"orders": {
"data": [ {
"type": "orders",
"id":2
} ]
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | utm-labels |
URL | /api/v1/utm-labels |
Список | GET /api/v1/utm-labels |
Чтение | GET /api/v1/utm-labels/{id} |
Создание | POST /api/v1/utm-labels |
Редактирование | PATCH /api/v1/utm-labels/{id} |
Удаление | DELETE /api/v1/utm-labels/{id} |
Атрибуты
Атрибуты UTM-метки
{
"data": {
"type": "utm-labels",
"id": "2",
"attributes": {
"campaign": "promo",
"city": "Moscow",
"content" : "link",
"created-at" : "2022-02-22T12:02:22.222+03:00",
"landing-page" : "landing.page",
"medium" : "Broad",
"search-query" : "лучшая crm система",
"source" : "synergycrm.ru",
"term" : "Term",
"u-type" : "utm",
"updated-at" : "2022-02-22T12:02:22.222+03:00"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
campaign | string |
promo |
да | Название кампании |
city | string |
Samara |
да | Город кампании |
content | string |
link |
да | Идентификатор объявления |
created-at | datetime |
2016-11-26T12:07:51.572+03:00 |
нет | Дата создания |
landing-page | string |
landing.page |
да | Идентификатор посадочной страницы |
medium | string |
Broad |
да | Тип трафика |
search-query | string |
crm |
да | Поисковый запрос |
source | string |
synergycrm.ru |
да | Источник кампании |
term | string |
api |
да | Ключевое слово |
u-type | string |
utm |
да | Тип метки |
updated-at | datetime |
2016-11-26T12:07:51.572+03:00 |
нет | Дата обновления |
Связи
Пример данных (перечислены не все связи)
{
"data": {
"type":"utm-labels",
"id":"2",
"relationships":{
"orders":{
"links":{
"self":"/api/v1/utm-labels/2/relationships/orders",
"related":"/api/v1/utm-labels/2/orders"
}
},
"deals":{
"links":{
"self":"/api/v1/utm-labels/2/relationships/deals",
"related":"/api/v1/utm-labels/2/deals"
}
}
}
}
}
Пример запроса с загруженными статусами и категориями продуктов
curl "https://app.synergycrm.ru/api/v1/utm-labels?include=deals,contacts" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/utm-labels?include=deals,contacts");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/utm-labels?include=deals,contacts')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/utm-labels?include=deals,contacts", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/utm-labels?include=deals,contacts',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/utm-labels?include=deals,contacts"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/utm-labels?include=deals,contacts'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Компания | company | companies |
Контакт | contact | contacts |
Звонки | telephony-calls | telephony-calls |
Заявки | orders | orders |
Сделки | deals | deals |
Фильтры
Получить список меток созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/utm-labels" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/utm-labels");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("filter[created-at-gte]=2022.02.22 12:00");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/utm-labels')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/x-www-form-urlencoded'
req['Authorization'] = 'Bearer api_token'
req.body = 'filter[created-at-gte]=2022.02.22 12:00'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`filter[created-at-gte]=2022.02.22 12:00`)
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/utm-labels", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/utm-labels?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/utm-labels?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/utm-labels?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести UTM-метки созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести UTM-метки созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести UTM-метки обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести UTM-метки обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Уведомления
Чтение уведомления
curl "https://app.synergycrm.ru/api/v1/notifications" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/notifications");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/notifications')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/notifications", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/notifications',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/notifications"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/notifications'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | notifications |
URL | /api/v1/notifications |
Список | GET /api/v1/notifications |
Чтение | GET /api/v1/notifications/{id} |
Изменить статус на "прочитано" | POST /api/v1/notifications/read_all |
Атрибуты
Атрибуты увдомления
{
"data": {
"type":"notifications",
"id":"2",
"attributes":{
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"text": "Текст уведомлоения",
"params":{
"time" : "0",
"entity" : null,
"responsible" : ""
},
"key": "diarytask_expired",
"emailed-at": "2022-02-22T12:02:22.222+03:00",
"read-at": "2022-02-22T12:02:22.222+03:00",
"confirm-read": false
}
}
}
Основные атрибуты
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
key | string |
comment |
да | Тип уведомления по объекту |
created-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата обновления |
emailed-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата отправки на email |
read-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата прочтения уведомления |
text | text |
Просрочена задача |
да | Текст уведомления |
confirm-read | boolean |
false |
да | Подтверждение прочтения |
params | hash |
{"time":"0"} |
да | Параметры уведомления |
Связи
Пример данных (перечислены не все связи)
{
"data": {
"type":"notifications",
"id":"2",
"relationships":{
"user":{
"links":{
"self":"/api/v1/notifications/2/relationships/user",
"related":"/api/v1/notifications/2/user"
}
},
"sender":{
"links":{
"self":"/api/v1/notifications/2/relationships/sender",
"related":"/api/v1/notifications/2/sender"
}
},
}
}
}
Пример запроса с пометкой уведомлений (прочитано)
curl "https://app.synergycrm.ru/api/v1/notifications/read_all" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"ids": [222, 2222, 22222]
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/notifications/read_all");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"ids\": [222, 2222, 22222]}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/notifications/read_all')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"ids": [222, 2222, 22222]
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"ids": [222, 2222, 22222]
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/notifications/read_all", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/notifications/read_all',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"ids": [222, 2222, 22222]
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/notifications/read_all"
payload = json.dumps({
"ids": [222, 2222, 22222]
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/notifications/read_all'));
request.body = json.encode({
"ids": [222, 2222, 22222]
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Пример запроса с загруженными автором изменения и объектом уведомления
curl "https://app.synergycrm.ru/api/v1/notifications?include=user,sender" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/notifications?include=user,sender");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/notifications?include=user,sender')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/notifications?include=user,sender", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/notifications?include=user,sender',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/notifications?include=user,sender"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/notifications?include=user,sender'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Получатель уведомления | user | users |
Отправитель уведомления | sender | users |
Объект уведомления | entity | telephony-calls, estate-finders, orders, checkups, diaries, users, invoice-payments, contracts, estate-properties, contacts, invoices, contact-groups, mail-messages, companies, entries, deals, projects |
Фильтры
Получить список уведомлений по типу уведомления по объекту
curl -G "https://app.synergycrm.ru/api/v1/notifications" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[key]=change_responsible"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/notifications?filter[key]=change_responsible");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/notifications?filter[key]=change_responsible')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/notifications?filter[key]=change_responsible", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/notifications?filter[key]=change_responsible',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/notifications?filter[key]=change_responsible"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/notifications?filter[key]=change_responsible'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести уведомления созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести уведомления созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести уведомления обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести уведомления обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
key* | Вывести уведомления по определённому типу уведомления по объекту | filter[key]=change_responsible |
* Возможные значения: change_responsible, comment, notification_read, add_performers, diarytask_completed, diaryevent_completed, diaryevent_started, diarytask_expired, new_user, scenario_notify, new_mail, system_update, incoming_call, chat_new_message.
Документы
JSON API type | document-template-renders |
URL | /api/v1/document-template-renders |
Список | GET /api/v1/document-template-renders |
Создание | POST /api/v1/document-template-renders |
Чтение | GET /api/v1/document-template-renders/{id} |
Скачать PDF | GET /api/v1/document-template-renders/{id}.pdf |
Скачать DOCX | GET /api/v1/document-template-renders/{id}.docx |
Удаление | DELETE /api/v1/document-template-renders/{id} |
Чтение документа
curl "https://app.synergycrm.ru/api/v1/document-template-renders" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/document-template-renders");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/document-template-renders')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/document-template-renders", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/document-template-renders',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/document-template-renders"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/document-template-renders'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Скачать PDF
curl "https://app.synergycrm.ru/api/v1/document-template-renders/1.pdf" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
--output file.pdf
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/document-template-renders/1.pdf");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/document-template-renders/1.pdf')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
File.write('file.pdf', res.body)
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/document-template-renders/1.pdf", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/document-template-renders/1.pdf',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/document-template-renders/1.pdf"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/document-template-renders/1.pdf'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Скачать DOCX
curl "https://app.synergycrm.ru/api/v1/document-template-renders/2.docx" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
--output file.docx
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/document-template-renders/2.docx");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/document-template-renders/2.docx')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
File.write('file.docx', res.body)
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/document-template-renders/2.docx", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/document-template-renders/2.docx',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/document-template-renders/2.docx"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/document-template-renders/2.docx'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Создание документа
curl "https://app.synergycrm.ru/api/v1/document-template-renders" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"document-template-renders",
"attributes":{
"name":"Документ"
},
"relationships":{
"document-template":{
"data":{
"type":"document-templates",
"id":"2"
}
},
"entity":{
"data":{
"type":"deals",
"id":"3"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/document-template-renders");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"document-template-renders\",\"attributes\":{\"name\":\"Документ\"},\"relationships\":{\"document-template\":{\"data\":{\"type\":\"document-templates\",\"id\":\"2\"}},\"entity\":{\"data\":{\"type\":\"deals\",\"id\":\"3\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/document-template-renders')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"document-template-renders",
"attributes":{
"name":"Документ"
},
"relationships":{
"document-template":{
"data":{
"type":"document-templates",
"id":"2"
}
},
"entity":{
"data":{
"type":"deals",
"id":"3"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"document-template-renders",
"attributes":{
"name":"Документ"
},
"relationships":{
"document-template":{
"data":{
"type":"document-templates",
"id":"2"
}
},
"entity":{
"data":{
"type":"deals",
"id":"3"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/document-template-renders", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/document-template-renders',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"document-template-renders",
"attributes":{
"name":"Документ"
},
"relationships":{
"document-template":{
"data":{
"type":"document-templates",
"id":"2"
}
},
"entity":{
"data":{
"type":"deals",
"id":"3"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/document-template-renders"
payload = json.dumps({
"data":{
"type":"document-template-renders",
"attributes":{
"name":"Документ"
},
"relationships":{
"document-template":{
"data":{
"type":"document-templates",
"id":"2"
}
},
"entity":{
"data":{
"type":"deals",
"id":"3"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/document-template-renders'));
request.body = json.encode({
"data":{
"type":"document-template-renders",
"attributes":{
"name":"Документ"
},
"relationships":{
"document-template":{
"data":{
"type":"document-templates",
"id":"2"
}
},
"entity":{
"data":{
"type":"deals",
"id":"3"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Атрибуты
Атрибуты документа
{
"data": {
"id": "2",
"type": "document-template-renders",
"links": {
"self": "https://app.synergycrm.ru/api/v1/document-template-renders/2"
},
"attributes": {
"created-at": "2022-02-22T12:22:22.222+03:00",
"updated-at": "2022-02-22T12:22:22.222+03:00",
"name":"Документ"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name | string |
Документ | да | Название |
previous-responsible-id | integer |
100 |
нет | Предыдущий ответственный |
Фильтры
Получить список категорий документа созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/document-template-renders" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/document-template-renders?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/document-template-renders?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/document-template-renders?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/document-template-renders?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/document-template-renders?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/document-template-renders?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
document-template-id | Вывести документы по шаблону документа | filter[document-template-id]=2 |
created-at-gte | Вывести документы созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести документы созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести документы обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести документы обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Шаблоны документов
Атрибуты
{
"data": {
"id": "2",
"type": "document-templates",
"links": {
"self": "https://app.synergycrm.ru/api/v1/document-templates/2"
},
"attributes": {
"created-at": "2022-02-22T12:22:22.222+03:00",
"updated-at": "2022-02-22T12:22:22.222+03:00",
"name":"Шаблон",
"description":"Описание",
"template":"<p>тут будет html шаблон</p>",
"active":true,
"options":{},
"file":{}
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Шаблон | да | Название |
description | string |
Описание | да | Описание |
template | text |
<p>тут будет html шаблон</p> |
да | Шаблон HTML |
active | boolean |
true | да | Активность шаблона |
options | hash |
{"mail_subject"=>""} | да | Опции шаблона |
file | hash |
{"url"=>""} | да | Ссылка на файл шаблона |
* Обязательные поля
Фильтры
Получить список шаблонов документов, созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/document-templates" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/document-templates?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/document-templates?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/document-templates?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/document-templates?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/document-templates?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/document-templates?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
document-template-category-id | Вывести объекты по категории шаблона документа | filter[document-template-category-id]=1 |
created-at-gte | Вывести шаблоны созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести шаблоны созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести шаблоны обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести шаблоны обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Категории шаблонов документа
JSON API type | document-template-categories |
URL | /api/v1/document-template-categories |
Список | GET /api/v1/document-template-categories |
Создание | POST /api/v1/document-template-categories |
Чтение | GET /api/v1/document-template-categories/{id} |
Удаление | DELETE /api/v1/document-template-categories/{id} |
Создание категории шаблонов документов
curl "https://app.synergycrm.ru/api/v1/document-template-categories" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"document-template-categories",
"attributes":{
"name":"Категория",
"purpose":"document",
"position":2
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/document-template-categories");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"document-template-categories\",\"attributes\":{\"name\":\"Категория\",\"purpose\":\"document\",\"position\":2}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/document-template-categories')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"document-template-categories",
"attributes":{
"name":"Категория",
"purpose":"document",
"position":2
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"document-template-categories",
"attributes":{
"name":"Категория",
"purpose":"document",
"position":2
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/document-template-categories", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/document-template-categories',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"document-template-categories",
"attributes":{
"name":"Категория",
"purpose":"document",
"position":2
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/document-template-categories"
payload = json.dumps({
"data":{
"type":"document-template-categories",
"attributes":{
"name":"Категория",
"purpose":"document",
"position":2
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/document-template-categories'));
request.body = json.encode({
"data":{
"type":"document-template-categories",
"attributes":{
"name":"Категория",
"purpose":"document",
"position":2
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Атрибуты
Атрибуты категорий шаблонов документов
{
"data": {
"id": "2",
"type": "document-template-categories",
"links": {
"self": "https://app.synergycrm.ru/api/v1/document-template-categories/2"
},
"attributes": {
"created-at": "2022-02-22T12:22:22.222+03:00",
"updated-at": "2022-02-22T12:22:22.222+03:00",
"name":"Категория",
"purpose":"document",
"position":2
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Категория | да | Название |
purpose | string |
sms |
да | Назначение шаблонов категории (смс, почтовые сообщения, документы) |
position | integer |
2 | да | Позиция категории документа |
* Обязательные поля
Ограничения по значениям
Аттрибут | Варианты |
---|---|
purpose | sms , mail , document |
Фильтры
Получить список категорий шаблонов документов созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/document-template-categories" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/document-template-categories?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/document-template-categories?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/document-template-categories?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/document-template-categories?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/document-template-categories?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/document-template-categories?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести категории документв, созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести категории документв, созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести категории документв, обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести категории документв, обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Чеклисты
Создание чеклиста для задачи
curl "https://app.synergycrm.ru/api/v1/checklists" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"checklists",
"attributes":{
"name":"Чеклист из API"
},
"relationships":{
"diary":{
"data":{
"type":"diaries",
"id":"2"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/checklists");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"checklists\",\"attributes\":{\"name\":\"Чеклист из API\"},\"relationships\":{\"diary\":{\"data\":{\"type\":\"diaries\",\"id\":\"2\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/checklists')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"checklists",
"attributes":{
"name":"Чеклист из API"
},
"relationships":{
"diary":{
"data":{
"type":"diaries",
"id":"2"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"checklists",
"attributes":{
"name":"Чеклист из API"
},
"relationships":{
"diary":{
"data":{
"type":"diaries",
"id":"2"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/checklists", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/checklists',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"checklists",
"attributes":{
"name":"Чеклист из API"
},
"relationships":{
"diary":{
"data":{
"type":"diaries",
"id":"2"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/checklists"
payload = json.dumps({
"data":{
"type":"checklists",
"attributes":{
"name":"Чеклист из API"
},
"relationships":{
"diary":{
"data":{
"type":"diaries",
"id":"2"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/checklists'));
request.body = json.encode({
"data":{
"type":"checklists",
"attributes":{
"name":"Чеклист из API"
},
"relationships":{
"diary":{
"data":{
"type":"diaries",
"id":"2"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | checklists |
URL | /api/v1/checklists |
Список | GET /api/v1/checklists |
Чтение | GET /api/v1/checklists/{id} |
Создание | POST /api/v1/checklists |
Редактирование | PATCH /api/v1/checklists/{id} |
Удаление | DELETE /api/v1/checklists/{id} |
Атрибуты
Атрибуты чеклиста
{
"data": {
"type":"checklists",
"id": 2,
"attributes":{
"name":"Наименование",
"position": "2",
"created-at":"2022-02-22T12:02:22.222+03:00",
"updated-at":"2022-02-22T12:02:22.222+03:00"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Наименование | да | Название товара |
position | integer |
2 | да | Порядковый номер |
created-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:02:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Связи
Пример данных (перечислены не все связи)
{
"data": {
"type":"checklists",
"id":"2",
"relationships":{
"diary":{
"links":{
"self":"/api/v1/checklists/2/relationships/diaries",
"related":"/api/v1/checklists/2/diary"
}
},
"items":{
"links":{
"self":"/api/v1/checklists/2/relationships/items",
"related":"/api/v1/checklists/2/items"
}
}
}
}
}
Название | Связь | JSON API type |
---|---|---|
Задача | diary | diaries |
Создатель | user | users |
Пункты чеклиста | items | checklist-items |
Фильтры
Получить список чеклистов по запросу
curl -G "https://app.synergycrm.ru/api/v1/checklists/?filter[q]=Чеклист" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/checklists/?filter[q]=Чеклист");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/checklists/?filter[q]=Чеклист')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/checklists/?filter[q]=Чеклист", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/checklists/?filter[q]=Чеклист',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/checklists/?filter[q]=Чеклист"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/checklists/?filter[q]=Чеклист'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести чеклисты созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести чеклисты созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести чеклисты обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести чеклисты обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
q | Вывести чеклисты по поисковому запросу | filter[q]=some-query |
Пункты чеклистов
Создание нового пункта чеклиста
curl "https://app.synergycrm.ru/api/v1/checklist-items" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"checklist-items",
"attributes":{
"description":"Описание"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/checklist-items");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"checklist-items\",\"attributes\":{\"description\":\"Описание\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/checklist-items')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"checklist-items",
"attributes":{
"description":"Описание"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"checklist-items",
"attributes":{
"description":"Описание"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/checklist-items", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/checklist-items',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"checklist-items",
"attributes":{
"description":"Описание"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/checklist-items"
payload = json.dumps({
"data":{
"type":"checklist-items",
"attributes":{
"description":"Описание"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/checklist-items'));
request.body = json.encode({
"data":{
"type":"checklist-items",
"attributes":{
"description":"Описание"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | checklist-items |
URL | /api/v1/checklist-items |
Список | GET /api/v1/checklist-items |
Чтение | GET /api/v1/checklist-items/{id} |
Создание | POST /api/v1/checklist-items |
Редактирование | PATCH /api/v1/checklist-items/{id} |
Удаление | DELETE /api/v1/checklist-items/{id} |
Атрибуты
Атрибуты чек-листа
{
"data": {
"type":"checklist-items",
"id":"2",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"description":"Описание",
"position":2,
"completed_at":"2022-02-22T12:22:22.222+03:00"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
description* | string |
Описание | да | Описание пункта чеклиста |
position | integer |
2 | да | Порядковый номер |
completed_at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата завершения пункта чеклиста |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Группа контактов
JSON API type | contact-groups |
URL | /api/v1/contact-groups |
Список | GET /api/v1/contact-groups |
Создание | POST /api/v1/contact-groups |
Чтение | GET /api/v1/contact-groups/{id} |
Удаление | DELETE /api/v1/contact-groups/{id} |
Чтение группы
curl "https://app.synergycrm.ru/api/v1/contact-groups" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/contact-groups");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/contact-groups')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/contact-groups", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contact-groups',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/contact-groups"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/contact-groups'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Создание группы
curl "https://app.synergycrm.ru/api/v1/contact-groups" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"contact-groups",
"attributes":{
"name":"Группа",
"color":"#fff",
"description:"Описание",
},
"relationships":{
"contact":{
"data":{
"type":"contacts",
"id":"2"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/contact-groups");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"contact-groups\",\"attributes\":{\"name\":\"Группа\",\"color\":\"#fff\",\"description:\"Описание\",},\"relationships\":{\"contact\":{\"data\":{\"type\":\"contacts\",\"id\":\"2\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/contact-groups')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"contact-groups",
"attributes":{
"name":"Группа",
"color":"#fff",
"description:"Описание",
},
"relationships":{
"contact":{
"data":{
"type":"contacts",
"id":"2"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"contact-groups",
"attributes":{
"name":"Группа",
"color":"#fff",
"description:"Описание",
},
"relationships":{
"contact":{
"data":{
"type":"contacts",
"id":"2"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/contact-groups", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contact-groups',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"contact-groups",
"attributes":{
"name":"Группа",
"color":"#fff",
"description:"Описание",
},
"relationships":{
"contact":{
"data":{
"type":"contacts",
"id":"2"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/contact-groups"
payload = json.dumps({
"data":{
"type":"contact-groups",
"attributes":{
"name":"Группа",
"color":"#fff",
"description: "Описание",
},
"relationships":{
"contact":{
"data":{
"type":"contacts",
"id":"2"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/contact-groups'));
request.body = json.encode({
"data":{
"type":"contact-groups",
"attributes":{
"name":"Группа",
"color":"#fff",
"description:"Описание",
},
"relationships":{
"contact":{
"data":{
"type":"contacts",
"id":"2"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Атрибуты
Атрибуты группы контактов
{
"data": {
"id": "1",
"type": "contact-groups",
"links": {
"self": "https://app.synergycrm.ru/api/v1/contact-groups/1"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "Группа",
"description": "Описание",
"color": "#fff",
"responsible": null,
"limit-participants": null
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name | string |
Группа | да | Название |
description | string |
Описание | да | Описание |
color | string |
#fff | да | Цвет |
limit-participants | integer |
20 | да | Лимит участников |
previous-responsible-id | integer |
100 |
нет | Предыдущий ответственный |
Связи
Пример данных (перечислены не все связи)
{
"data": {
"type":"contact-groups",
"id":"2",
"relationships":{
"responsible":{
"links":{
"self":"/api/v1/contact-groups/2/relationships/responsible",
"related":"/api/v1/contact-groups/2/responsible"
}
},
"contacts":{
"links":{
"self":"/api/v1/contact-groups/2/relationships/contacts",
"related":"/api/v1/contact-groups/2/contacts"
}
}
}
}
}
Пример запроса с загруженными отвественными
curl "https://app.synergycrm.ru/api/v1/contact-groups?include=responsible" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/contact-groups?include=responsible");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/contact-groups')
params = {
:include => 'responsible',
}
uri.query = URI.encode_www_form(params)
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/contact-groups?include=responsible", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contact-groups?include=responsible',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/contact-groups?include=responsible"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/contact-groups?include=responsible'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Ответственный | responsible | users |
Создатель | user | users |
Контакты | contacts | contacts |
Счета | invoices | invoices |
Платежи | invoice-payments | invoice-payments |
Фильтры
Получить список групп контактов созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/contact-groups" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/contact-groups?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/contact-groups?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/contact-groups?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/contact-groups?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/contact-groups?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/contact-groups?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
responsible-id | Вывести группы с определённым ответственным | filter[responsible-id]=2 |
user-id | Вывести группы с определённым создателем | filter[user-id]=2 |
created-at-gte | Вывести группы созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести группы созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести группы обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести группы обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
archived | Вывести группы в архиве | filter[archived]=2 |
discarded | Вывести группы в корзине | filter[discarded]=2 |
actual | Вывести актуальные группы | filter[actual]=2 |
Осмотры
Создание осмотра
curl "https://app.synergycrm.ru/api/v1/checkups" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"checkups",
"attributes":{
"name": "Осмотр из API",
"description": "Описание"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/checkups");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"checkups\",\"attributes\":{\"name\": \"Осмотр из API\",\"description\": \"Описание\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/checkups')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"checkups",
"attributes":{
"name": "Осмотр из API",
"description": "Описание"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"checkups",
"attributes":{
"name": "Осмотр из API",
"description": "Описание"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/checkups", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/checkups',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"checkups",
"attributes":{
"name": "Осмотр из API",
"description": "Описание"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/checkups"
payload = json.dumps({
"data":{
"type":"checkups",
"attributes":{
"name": "Осмотр из API",
"description": "Описание"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/checkups'));
request.body = json.encode({
"data":{
"type":"checkups",
"attributes":{
"name": "Осмотр из API",
"description": "Описание"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | checkups |
URL | /api/v1/checkups |
Список | GET /api/v1/checkups |
Чтение | GET /api/v1/checkups/{id} |
Создание | POST /api/v1/checkups |
Редактирование | PATCH /api/v1/checkups/{id} |
Удаление | DELETE /api/v1/checkups/{id} |
Атрибуты
Атрибуты осмотра
{
"data": {
"type":"checkups",
"id": 2,
"attributes":{
"name":"Наименование",
"number": "2",
"description": "Описание",
"created-at":"2022-02-22T12:02:22.222+03:00",
"updated-at":"2022-02-22T12:02:22.222+03:00"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Наименование | да | Название |
number | integer |
2 | да | Номер |
description | text |
Описание | да | Описание |
previous-responsible-id | integer |
100 |
нет | Предыдущий ответственный |
created-at | datetime |
2022-02-22T12:02:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:02:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Связи
Пример данных (перечислены не все связи)
{
"data": {
"type":"checkups",
"id":"2",
"relationships":{
"user":{
"links":{
"self":"/api/v1/checkups/2/relationships/user",
"related":"http://localhost:3000/api/v1/checkups/2/user"
}
},
"contact":{
"links":{
"self":"/api/v1/checkups/2/relationships/contact",
"related":"/api/v1/checkups/2/contact"
}
}
}
}
}
Название | Связь | JSON API type |
---|---|---|
Создатель | user | users |
Контакт | contact | contacts |
Ответственный | responsible | users |
Задачи | diaries | diaries |
Контакты | contacts | contacts |
Сделки | deals | deals |
Заявки | orders | orders |
Записи | entries | entries |
Продукты | products | products |
Контракты | contracts | contracts |
Документы | document-template-renders | document-template-renders |
Компании | companies | companies |
Фильтры
Получить список осмотров по запросу
curl -G "https://app.synergycrm.ru/api/v1/checkups/?filter[q]=Осмотр" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/checkups/?filter[q]=Осмотр");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/checkups/?filter[q]=Осмотр')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/checkups/?filter[q]=Осмотр", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/checkups/?filter[q]=Осмотр',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/checkups/?filter[q]=Осмотр "
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/checkups/?filter[q]=Осмотр'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести осмотры созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести осмотры созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести осмотры обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести осмотры обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
discarded-at-gte | Вывести осмотры в корзине после указанного времени | filter[discarded-at-gte]=2022.02.22 12:00 |
discarded-at-lte | Вывести осмотры в корзине до указанного времени | filter[discarded-at-lte]=2022.02.22 12:00 |
responsible-id | Вывести осмотры по определенному ответственному | filter[responsible-id]=2 |
user-id | Вывести осмотры по определенному создателю | filter[user-id]=2 |
archived | Вывести осмотры в архиве | filter[archived]=2 |
discarded | Вывести осмотры в корзине | filter[discarded]=2 |
actual | Вывести актуальные осмотры | filter[actual]=2 |
discarded-at-null | Вывести осмотры не в корзине | filter[discarded-at-null]=true |
table-state-id | Вывести осмотры по заданному табличному фильтру | filter[table-state-id]=2 |
q | Вывести осмотры по поисковому запросу | filter[q]=some-query |
Склады
Создание нового склада продуктов
curl "https://app.synergycrm.ru/api/v1/stores" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data":{
"type":"stores",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name":"Категория по API"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/stores");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\":{\"type\":\"stores\",\"attributes\":{\"created-at\":\"2022-02-22T12:22:22.222+03:00\",\"updated-at\":\"2022-02-22T12:22:22.222+03:00\",\"name\":\"Категория по API\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/stores')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data":{
"type":"stores",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"name":"Категория по API"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data":{
"type":"stores",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00", "updated-at":"2022-02-22T12:22:22.222+03:00",
"name":"Категория по API"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/stores", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/stores',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data":{
"type":"stores",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00", "updated-at":"2022-02-22T12:22:22.222+03:00",
"name":"Категория по API"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/stores"
payload = json.dumps({
"data":{
"type":"stores",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00", "updated-at":"2022-02-22T12:22:22.222+03:00",
"name":"Категория по API"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/stores'));
request.body = json.encode({
"data":{
"type":"stores",
"attributes":{
"created-at":"2022-02-22T12:22:22.222+03:00", "updated-at":"2022-02-22T12:22:22.222+03:00",
"name":"Категория по API"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | stores |
URL | /api/v1/stores |
Список | GET /api/v1/stores |
Чтение | GET /api/v1/stores/{id} |
Создание | POST /api/v1/stores |
Редактирование | PATCH /api/v1/stores/{id} |
Удаление | DELETE /api/v1/stores/{id} |
Атрибуты
Атрибуты склада
{
"data": {
"type":"stores",
"id":"2",
"attributes":{
"name": "Мой склад в Москве"
}
}
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name* | string |
Мой склад в Москве | да | Название склада |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
да | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
* Обязательные поля
Фильтры
Получить список складов продуктов созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/stores" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/stores?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/stores?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/stores?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/stores?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/stores?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/stores?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести склады созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести склады созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести склады обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести склады обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Остатки
Получить остатки прдуктов на определённом складе
curl -G "https://app.synergycrm.ru/api/v1/stores/2/product-balances" \
-X GET \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/stores/2/product-balances");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/stores/2/product-balances')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/stores/2/product-balances", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/stores/2/product-balances',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/stores/2/product-balances"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/stores/2/product-balances'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Получить остатки определённого продукта на складах
curl -G "https://app.synergycrm.ru/api/v1/products/2/store-balances" \
-X GET \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/products/2/store-balances");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/products/2/store-balances')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/products/2/store-balances", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/products/2/store-balances',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/products/2/store-balances"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/products/2/store-balances'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | product-by-stores |
Остатки по складу | GET /api/v1/stores/{id}/product-balances |
Остатки по продукту | GET /api/v1/products/{id}/store-balances |
Атрибуты
Атрибуты остатков продукта на складе
{
"data":
[
{
"id": "2",
"type": "product-by-stores",
"links":
{
"self": "https://app.synergycrm.ru/api/v1/product-by-stores/2"
},
"attributes":
{
"created-at": "2022-02-22T12:22:22.222+03:00",
"updated-at": "2022-02-22T12:22:22.222+03:00",
"cached-at": "2022-02-22T12:22:22.222+03:00",
"stock-quantity": "2.0",
"reserved-quantity": null,
"available-quantity": "2.0",
"waiting-quantity": null,
"product-id": 2,
"store-id": 2
},
"relationships":
{
"store":
{
"links":
{
"self": "https://app.synergycrm.ru/api/v1/product-by-stores/2/relationships/store",
"related": "https://app.synergycrm.ru/api/v1/product-by-stores/2/store"
}
},
"product":
{
"links":
{
"self": "https://app.synergycrm.ru/api/v1/product-by-stores/2/relationships/product",
"related": "https://app.synergycrm.ru/api/v1/product-by-stores/2/product"
}
}
}
}
]
}
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
stock-quantity | decimal |
2.0 | нет | Общее количество позиций |
available-quantity | decimal |
2.0 | нет | Доступное количество |
reserved-quantity | decimal |
0.0 | нет | Зарезервировано для продажи |
waiting-quantity | decimal |
0.0 | нет | Ожидается от поставщика |
product-id | integer |
2 | нет | id продукта |
stock-id | integer |
2 | нет | id склада |
created-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата создания |
updated-at | datetime |
2022-02-22T12:22:22.222+03:00 |
нет | Дата обновления |
Позиции складской операции
Пример данных для создания позиции складской операции. Обязательно необходимо указать складскую операцию
operation
и продуктproduct
. Cвязьstore-storage
является обязательной при добавлении позиции в такие операции, как: 'Отборка товаров из мест хранения', 'Выдача грузов' и 'Формирование отправок'. Связьcomplectation-product
является обязательной для операции 'Списание', при условии, если списание товара происходит с места комплектации.
{
"data":{
"type":"store-positions",
"attributes":{
"quantity":2,
"amount":222.2,
"discount":20
},
"relationships":{
"product":{
"data":{
"type":"products",
"id":2
}
},
"operation":{
"data":{
"type":"store-operations",
"id":2
}
},
"store-storage":{
"data":{
"type":"store-storages",
"id":2
}
},
"complectation-product":{
"data":{
"type":"store-complectation-products",
"id":2
}
}
}
}
}
JSON API type | store-positions |
URL | /api/v1/store-positions |
Список | GET /api/v1/store-positions |
Чтение | GET /api/v1/store-positions/{id} |
Создание | POST /api/v1/store-positions |
Редактирование | PATCH /api/v1/store-positions/{id} |
Удаление | DELETE /api/v1/store-positions/{id} |
Атрибуты
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name | string |
Товар | да | Переопределенное наименование товара |
quantity | integer |
2 | да | Количество товара |
discount | decimal |
20.0 | да | Скидка на товар (в процентах) |
discount-amount | decimal |
200.0 | нет | Сумма скидки |
amount | decimal |
1000.0 | да | Сумма позиции |
amount-with-discount | decimal |
800,0 | нет | Сумма позиции с учетом скидки |
is-service | boolean |
false | нет | Товар (false) или услуга (true) |
unit | string |
'шт' | нет | Единица измерения |
code | code |
'123123' | нет | Код товара |
Связи
Загрузка позиций по определенной операции (id = 2)
curl "https://app.synergycrm.ru/api/v1/store-operations/2/relationships/store_positions" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/store-operations/2/relationships/store_positions");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/store-operations/2/relationships/store_positions')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/store-operations/2/relationships/store_positions", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/store-operations/2/relationships/store_positions',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/store-operations/2/relationships/store_positions"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/store-operations/2/relationships/store_positions'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Название | Связь | JSON API type |
---|---|---|
Складская операция | operation | store-operations |
Продукт | product | products |
Место хранения | store-storage | store-storages |
Позиция в месте комплектации | complectation-product | store-complectation-products |
Фильтры
Получить список складов продуктов созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/store-positions" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести позиции в складской операции созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести позиции в складской операции созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести позиции в складской операции обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести позиции в складской операции обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
Складские операции
{
"data":{
"id":"2",
"type":"store-operations",
"links":{
"self":"https://app.synergycrm.ru/api/v1/store-operations/2"
},
"attributes":{
"number":2,
"kind":"order_supplier",
"description":null,
"datetime":"2022-02-22T12:22:22.222+03:00",
"overhead-costs":"0.0",
"overhead-type":"amount",
"reservation-active":false,
"waiting-active":false,
"vat-active":true,
"vat-in-price":true,
"archived-at":null,
"discarded-at":null,
"status":"executing",
"amount":"20000.0",
"total-vat":"0.0",
"executed-at":null,
"canceled-at":null,
"previous-responsible-id":null,
"created-at":"2022-02-22T12:22:22.222+03:00",
"updated-at":"2022-02-22T12:22:22.222+03:00",
"cached-at":"2022-02-22T12:22:22.222+03:00",
},
"relationships":{
"responsible":{
"links":{
"self":"https://app.synergycrm.ru/api/v1/store-operations/2/relationships/responsible",
"related":"https://app.synergycrm.ru/api/v1/store-operations/2/responsible"
}
},
"org-detail":{
"links":{
"self":"https://app.synergycrm.ru/api/v1/store-operations/2/relationships/org-detail",
"related":"https://app.synergycrm.ru/api/v1/store-operations/2/org-detail"
}
},
"store":{
"links":{
"self":"https://app.synergycrm.ru/api/v1/store-operations/2/relationships/store",
"related":"https://app.synergycrm.ru/api/v1/store-operations/2/store"
}
},
"invoices":{
"links":{
"self":"https://app.synergycrm.ru/api/v1/store-operations/2/relationships/invoices",
"related":"https://app.synergycrm.ru/api/v1/store-operations/2/invoices"
}
},
"positions":{
"links":{
"self":"https://app.synergycrm.ru/api/v1/store-operations/2/relationships/positions",
"related":"https://app.synergycrm.ru/api/v1/store-operations/2/positions"
}
}
}
}
}
JSON API type | store-operations |
URL | /api/v1/store-operations |
Список | GET /api/v1/store-operations |
Чтение | GET /api/v1/store-operations/{id} |
Создание | POST /api/v1/store-operations |
Редактирование | PATCH /api/v1/store-operations/{id} |
Удаление | DELETE /api/v1/store-operations/{id} |
Провести | POST /api/v1/store-operations/{id}/execute |
Отменить | POST /api/v1/store-operations/{id}/cancel |
Атрибуты
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
number | integer |
2 | да | Порядковый номер |
kind | string |
order_supplier | да | Тип операции |
description | text |
text | да | Описание |
datetime | datetime |
2022-02-22T12:22:22.222+03:00 | да | От |
overhead-costs | decimal |
0.0 | да | Накл. расходы |
overhead-type | string |
amount | да | Тип накл. расходов |
reservation-active | boolean |
false | да | Резерв |
waiting-active | boolean |
true | да | Ожидание |
vat-active | boolean |
true | да | НДС |
vat-in-price | boolean |
true | да | Цена включает НДС |
status | string |
executing | нет | Статус |
amount | decimal |
20000.0 | нет | Сумма |
total-vat | decimal |
20 | нет | Сумма НДС |
executed-at | datetime |
2022-02-22T12:22:22.222+03:00 | нет | Проведено |
canceled-at | datetime |
2022-02-22T12:22:22.222+03:00 | нет | Отменено |
previous-responsible-id | integer |
2 | нет | Предыдущий ответственный |
Связи
Название | Связь | JSON API type |
---|---|---|
Контрагент | contractor | companies , contacts |
Ответственный | responsible | users |
Организация | org-detail | org-details |
Со склада | store | stores |
На склад | to-store | stores |
Грузополучатель | consignee | companies , contacts |
Сделка | deal | deals |
Заявка | order | orders |
Основание | parent | store-operations |
Счета | invoices | invoices |
Позиции | store-positions | store-positions |
Место комплектации | store-complectation | store-complectations |
С места хранения | store-storage | store-storages |
На место хранения | to-store-storage | store-storages |
На основании | inventory | store-inventories |
Разгрузка автотранспорта | unload-operation | store-operations |
Фильтры
Получить список складов продуктов созданных до определённой даты
curl -G "https://app.synergycrm.ru/api/v1/store-positions" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[created-at-gte]=2022.02.22 12:00"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
created-at-gte | Вывести операции созданные после указанного времени | filter[created-at-gte]=2022.02.22 12:00 |
created-at-lte | Вывести операции созданные до указанного времени | filter[created-at-lte]=2022.02.22 12:00 |
updated-at-gte | Вывести операции обновлённые после указанного времени | filter[updated-at-gte]=2022.02.22 12:00 |
updated-at-lte | Вывести операции обновлённые до указанного времени | filter[updated-at-lte]=2022.02.22 12:00 |
datetime-gte | Вывести операции с датой "От" после указанного времени | filter[datetime-at-gte]=2022.02.22 12:00 |
datetime-lte | Вывести операции с датой "От" до указанного времени | filter[datetime-at-lte]=2022.02.22 12:00 |
archived-at-gte | Вывести операции в архиве после указанного времени | filter[archived-at-gte]=2022.02.22 12:00 |
archived-at-lte | Вывести операции в архиве до указанного времени | filter[archived-at-lte]=2022.02.22 12:00 |
archived-at-null | Вывести операции не в архиве | filter[archived-at-null]=true |
discarded-at-gte | Вывести операции в корзине после указанного времени | filter[discarded-at-gte]=2022.02.22 12:00 |
discarded-at-lte | Вывести операции в корзине до указанного времени | filter[discarded-at-lte]=2022.02.22 12:00 |
discarded-at-null | Вывести операции не в корзине | filter[discarded-at-null]=true |
executed-at-gte | Вывести операции проведенные после указанного времени | filter[executed-at-gte]=2022.02.22 12:00 |
executed-at-lte | Вывести операции проведенные до указанного времени | filter[executed-at-lte]=2022.02.22 12:00 |
executed-at-null | Вывести не проведенные операции | filter[executed-at-null]=true |
canceled-at-gte | Вывести операции отмененные после указанного времени | filter[canceled-at-gte]=2022.02.22 12:00 |
canceled-at-lte | Вывести операции отмененные до указанного времени | filter[canceled-at-lte]=2022.02.22 12:00 |
canceled-at-null | Вывести не отмененные операции | filter[canceled-at-null]=true |
Список товаров/услуг доступных для добавления в операцию
JSON API type | products |
Список | GET /api/v1/store-operations/{id}/available-products |
Дополнительные аттрибуты для списка продуктов
Помимо аттрибутов из products
, могут приходить такие аттрибуты как:
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
quantity-for-create | float |
2.0 | нет | Доступное количество товара/услуги |
store-complectation-product-id | integer |
2 | нет | Связь с товаром в месте комплектации |
storage-name | string |
Палета | нет | Название места хранения |
store-storage-id | integer |
1 | нет | Связь с местом хранения |
Атрибуты quantity-for-create
и storage-name
являются информационными.
При получении атрибута store-storage-id
или store-complectation-product-id
, необходимо их значение использовать для связей при создании позиции в операции.
Пример данных в теле запроса при создании позиции в операции списания, если списание происходит с места комплектации
{
"data":{
"type":"store-positions",
"attributes":{
"quantity":2
},
"relationships":{
"product":{
"data":{
"type":"products",
"id":"6"
}
},
"operation":{
"data":{
"type":"store-operations",
"id":"140"
}
},
"complectation-product":{
"data":{
"type":"store-complectation-products",
"id":"4"
}
}
}
}
}
Пример данных в теле запроса при создании позиции в операции, если необходимо указать связь со
store-storages
{
"data":{
"type":"store-positions",
"attributes":{
"quantity":2
},
"relationships":{
"product":{
"data":{
"type":"products",
"id":"6"
}
},
"operation":{
"data":{
"type":"store-operations",
"id":"140"
}
},
"store-storage":{
"data":{
"type":"store-storages",
"id":"4"
}
}
}
}
}
Создание заказа поставщику
Создание заказа поставщику
{
"data":{
"type":"store-operations",
"attributes":{
"kind":"order_supplier",
"datetime":"2022-02-22T12:22:22.222+03:00",
},
"relationships":{
"responsible":{
"data":{
"type":"users",
"id":"2"
}
},
"org-detail":{
"data":{
"type":"org-details",
"id":"2"
}
},
"to-store":{
"data":{
"type":"stores",
"id":"2"
}
},
"contractor":{
"data":{
"type":"companies",
"id":"2"
}
}
}
}
}
Создание приемки
Создание приемки Связь
unload-operation
указывается в случае, если приемка осуществляется на основании операции разгрузки автотранспорта
{
"data":{
"type":"store-operations",
"attributes":{
"kind":"acceptance",
"datetime":"2022-02-22T12:22:22.222+03:00",
},
"relationships":{
"responsible":{
"data":{
"type":"users",
"id":"2"
}
},
"org-detail":{
"data":{
"type":"org-details",
"id":"2"
}
},
"to-store":{
"data":{
"type":"stores",
"id":"2"
}
},
"contractor":{
"data":{
"type":"companies",
"id":"2"
}
},
"unload-operation":{
"data":{
"type":"store-operations",
"id":2
}
}
}
}
}
Создание оприходования
Создание оприходования
{
"data":{
"type":"store-operations",
"attributes":{
"kind":"enter",
"datetime":"2022-02-22T12:22:22.222+03:00",
},
"relationships":{
"responsible":{
"data":{
"type":"users",
"id":"2"
}
},
"org-detail":{
"data":{
"type":"org-details",
"id":"2"
}
},
"to-store":{
"data":{
"type":"stores",
"id":"2"
}
}
}
}
}
Создание оприходования излишков
Создание оприходования излишков Данная операция подразумевает оприходование на основании проведенной инвентаризации, поэтому связь с
store-inventory
является обязательной.
{
"data":{
"type":"store-operations",
"attributes":{
"kind":"enter_over",
"datetime":"2022-02-22T12:22:22.222+03:00",
},
"relationships":{
"responsible":{
"data":{
"type":"users",
"id":"2"
}
},
"org-detail":{
"data":{
"type":"org-details",
"id":"2"
}
},
"to-store":{
"data":{
"type":"stores",
"id":"2"
}
},
"store-inventory":{
"data":{
"type":"store-inventories",
"id":"2"
}
}
}
}
}
Создание заказа покупателя
Создание заказа покупателя
{
"data":{
"type":"store-operations",
"attributes":{
"kind":"order_buyer",
"datetime":"2022-02-22T12:22:22.222+03:00",
},
"relationships":{
"responsible":{
"data":{
"type":"users",
"id":"2"
}
},
"org-detail":{
"data":{
"type":"org-details",
"id":"2"
}
},
"store":{
"data":{
"type":"stores",
"id":"2"
}
},
"contractor":{
"data":{
"type":"companies",
"id":"2"
}
},
"consignee":{
"data":{
"type":"contacts",
"id":"2"
}
},
"deal":{
"data":{
"type":"deals",
"id":"6"
}
},
"order":{
"data":{
"type":"orders",
"id":"2"
}
}
}
}
}
Создание отгрузки
Создание отгрузки
{
"data":{
"type":"store-operations",
"attributes":{
"kind":"shipping",
"datetime":"2022-02-22T12:22:22.222+03:00",
},
"relationships":{
"responsible":{
"data":{
"type":"users",
"id":"2"
}
},
"org-detail":{
"data":{
"type":"org-details",
"id":"2"
}
},
"store":{
"data":{
"type":"stores",
"id":"2"
}
},
"contractor":{
"data":{
"type":"companies",
"id":"2"
}
},
"consignee":{
"data":{
"type":"contacts",
"id":"2"
}
},
"deal":{
"data":{
"type":"deals",
"id":"2"
}
},
"order":{
"data":{
"type":"orders",
"id":"2"
}
}
}
}
}
Создание списания
Создание списания Списание проводится нераспределенных товаров, товаров находящихся на местах комплектации, товаров с мест хранения, а так же на основе инвентаризации. Для списания нераспределенных товаров, связи
store-storage
,store-complecation
являются необязательными. Для списания с места хранения, необходимо указать связьstore-storage
. Для списания с места комплектации, необходимо указать связьstore-complectation
. Связь с инвентаризациейstore-inventory
является опциональной.
{
"data":{
"type":"store-operations",
"attributes":{
"kind":"write_off",
"datetime":"2022-02-22T12:22:22.222+03:00",
},
"relationships":{
"responsible":{
"data":{
"type":"users",
"id":"2"
}
},
"org-detail":{
"data":{
"type":"org-details",
"id":"2"
}
},
"store":{
"data":{
"type":"stores",
"id":"2"
}
},
"store-storage":{
"data":{
"type":"store-storages",
"id":"2"
}
},
"store-complectation":{
"data":{
"type":"store-complectations",
"id":"2"
}
},
"store-inventory":{
"data":{
"type":"store-inventories",
"id":"2"
}
}
}
}
}
Создание перемещения
Создание перемещения
{
"data":{
"type":"store-operations",
"attributes":{
"kind":"transfer",
"datetime":"2023-04-06T10:26:22.222+03:00"
},
"relationships":{
"org-detail":{
"data":{
"type":"org-details",
"id":1
}
},
"store":{
"data":{
"type":"stores",
"id":"1"
}
},
"to-store":{
"data":{
"type":"stores",
"id":"2"
}
}
}
}
}
Создание формирования отправок
Создание формирования отправок
{
"data":{
"type":"store-operations",
"attributes":{
"kind":"forming_shipments",
"datetime":"2023-04-06T10:26:22.222+03:00"
},
"relationships":{
"org-detail":{
"data":{
"type":"org-details",
"id":1
}
},
"store":{
"data":{
"type":"stores",
"id":"2"
}
},
"store-complectation":{
"data":{
"type":"store-complectations",
"id":"2"
}
}
}
}
}
Создание выдача грузов
Создание выдача грузов
{
"data":{
"type":"store-operations",
"attributes":{
"kind":"goods_delivery",
"datetime":"2023-04-06T10:26:22.222+03:00"
},
"relationships":{
"org-detail":{
"data":{
"type":"org-details",
"id":1
}
},
"store":{
"data":{
"type":"stores",
"id":"2"
}
}
}
}
}
Создание отборка товаров из мест хранения
Создание отборка товаров из мест хранения
{
"data":{
"type":"store-operations",
"attributes":{
"kind":"moving_store_storage",
"datetime":"2023-04-06T10:26:22.222+03:00"
},
"relationships":{
"org-detail":{
"data":{
"type":"org-details",
"id":1
}
},
"store":{
"data":{
"type":"stores",
"id":"2"
}
},
"store-storage":{
"data":{
"type":"store-storages",
"id":"15"
}
},
"to-store-storage":{
"data":{
"type":"store-storages",
"id":"13"
}
}
}
}
}
Создание комплектование и упаковка
Создание комплектование и упаковка
{
"data":{
"type":"store-operations",
"attributes":{
"kind":"pack",
"datetime":"2023-04-06T10:26:22.222+03:00"
},
"relationships":{
"org-detail":{
"data":{
"type":"org-details",
"id":1
}
},
"store":{
"data":{
"type":"stores",
"id":"2"
}
},
"store-complectation":{
"data":{
"type":"store-complectations",
"id":"2"
}
}
}
}
}
Создание разгрузка транспорта
Создание разгрузка транспорта
{
"data":{
"type":"store-operations",
"attributes":{
"kind":"transport_unloading",
"datetime":"2023-04-06T10:26:22.222+03:00"
},
"relationships":{
"org-detail":{
"data":{
"type":"org-details",
"id":1
}
},
"to-store":{
"data":{
"type":"stores",
"id":"2"
}
}
}
}
}
Места хранения
Пример данных для создания места хранения. Обязательными являются аттрибут
name
и связь со складомstore
, аттрибутcode
является опциональным.
{
"data":{
"type":"store-storages",
"attributes":{
"name":"MyStorage",
"code":"123456"
},
"relationships":{
"store":{
"data":{
"type":"stores",
"id":2
}
}
}
}
}
JSON API type | store-storages |
URL | /api/v1/store-storages |
Список | GET /api/v1/store-storages |
Чтение | GET /api/v1/store-storages/{id} |
Создание | POST /api/v1/store-storages |
Редактирование | PATCH /api/v1/store-storages/{id} |
Удаление | DELETE /api/v1/store-storages/{id} |
Атрибуты
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
number | integer |
2 | нет | Порядковый номер |
name | string |
Палета | да | Название места хранения |
code | string |
1234567 | да | Код места хранения |
Связи
Название | Связь | JSON API type |
---|---|---|
Склад | store | stores |
Загрузка позиций с определенного места хранения (id = 14)
curl "https://app.synergycrm.ru/api/v1/store-storages/14/relationships/store-storage-products" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/store-storages/14/relationships/store-storage-products");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/store-storages/14/relationships/store-storage-products')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/store-storages/14/relationships/store-storage-products", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/store-storages/14/relationships/store-storage-products',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/store-storages/14/relationships/store-storage-products"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/store-storages/14/relationships/store-storage-products'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Позиции на месте хранения
Пример данных для создания позиции на месте хранения. Обязательно необходимо указать связи с местом хранения
store-storage
, продуктомproduct
и количество. Имя позиции подтягивается из имени продукта.
{
"data":{
"type":"store-storage-products",
"attributes":{
"quantity":5
},
"relationships":{
"store-storage":{
"data":{
"type":"store-storages",
"id":15
}
},
"product":{
"data":{
"type":"products",
"id":7
}
}
}
}
}
JSON API type | store-storage-products |
URL | /api/v1/store-storage-products |
Список | GET /api/v1/store-storage-products |
Чтение | GET /api/v1/store-storage-products/{id} |
Создание | POST /api/v1/store-storage-products |
Редактирование | PATCH /api/v1/store-storage-products/{id} |
Удаление | DELETE /api/v1/store-storage-products/{id} |
Атрибуты
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name | string |
Продукт | нет | Название продукта в позиции |
quantity | float |
0.0 | да | Количество |
Связи
Название | Связь | JSON API type |
---|---|---|
Место хранения | store-storage | store-storages |
Продукт | store-storage-product | store-storage-products |
Список товаров доступных для добавления на место хранения
JSON API type | products |
Список | GET /api/v1/store-storages/{id}/available-products |
Места комплектации
Пример данных для создания места комплектации Для создания места комплектации в атрибутах необходимо передать
name
, опицональноcode
, и обязательную связь со складомstore
.
{
"data":{
"type":"store-complectations",
"attributes":{
"name":"Vivoz999",
"code":"123324"
},
"relationships":{
"store":{
"data":{
"type":"stores",
"id":2
}
}
}
}
}
JSON API type | store-complectations |
URL | /api/v1/store-complectations |
Список | GET /api/v1/store-complectations |
Чтение | GET /api/v1/store-complectations/{id} |
Создание | POST /api/v1/store-complectations |
Редактирование | PATCH /api/v1/store-complectations/{id} |
Удаление | DELETE /api/v1/store-complectations/{id} |
Атрибуты
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
number | integer |
2 | нет | Порядковый номер |
name | string |
Палета | да | Название места хранения |
code | string |
1234567 | да | Код места хранения |
Связи
Название | Связь | JSON API type |
---|---|---|
Склад | store | stores |
Позиции на комплектации | store-complectation-products | store-complectation-products |
Загрузка позиций с определенного места комплектации (id = 2)
curl "https://app.synergycrm.ru/api/v1/store-complectations/2/relationships/store-complectation-products" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/store-complectations/2/relationships/store-complectation-products");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/store-complectations/2/relationships/store-complectation-products')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/store-complectations/2/relationships/store-complectation-products", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/store-complectations/2/relationships/store-complectation-products',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/store-complectations/2/relationships/store-complectation-products"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/store-complectations/2/relationships/store-complectation-products'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Инвентаризация
Пример данных для создания инвентаризации. Никаких аттрибутов передавать не надо, аттрибут
name
генерируется на стороне сервера.
{
"data": {
"type": "store-inventories"
}
}
JSON API type | store-inventories |
URL | /api/v1/store-inventories |
Список | GET /api/v1/store-inventories |
Чтение | GET /api/v1/store-inventories/{id} |
Создание | POST /api/v1/store-inventories |
Редактирование | PATCH /api/v1/store-inventories/{id} |
Удаление | DELETE /api/v1/store-inventories/{id} |
Провести | POST /api/v1/store-inventories/{id}/execute |
Отменить | POST /api/v1/store-inventories/{id}/cancel |
Атрибуты
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
number | integer |
2 | нет | Порядковый номер |
name | string |
Инвентаризация № 2 от 01.01.2023 | нет | Название инвентаризации |
status | string |
completed | нет | Статус инвентаризации |
executed-at | datetime |
2022-02-22T12:22:22.222+03:00 | нет | Проведено |
Связи
Загрузка позиций с из инвентаризации (id = 11)
curl "http://app.synergycrm.ru/api/v1/store-inventories/11/relationships/store-inventory-positions" \
-X GET \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("http://app.synergycrm.ru/api/v1/store-inventories/11/relationships/store-inventory-positions");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('http://app.synergycrm.ru/api/v1/store-inventories/11/relationships/store-inventory-positions')
req = Net::HTTP::Get.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "http://app.synergycrm.ru/api/v1/store-inventories/11/relationships/store-inventory-positions", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'http://app.synergycrm.ru/api/v1/store-inventories/11/relationships/store-inventory-positions',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "http://app.synergycrm.ru/api/v1/store-inventories/11/relationships/store-inventory-positions"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('http://app.synergycrm.ru/api/v1/store-inventories/11/relationships/store-inventory-positions'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
executed-at-gte | Вывести операции проведенные после указанного времени | filter[executed-at-gte]=2022.02.22 12:00 |
executed-at-lte | Вывести операции проведенные до указанного времени | filter[executed-at-lte]=2022.02.22 12:00 |
executed-at-null | Вывести не проведенные операции | filter[executed-at-null]=true |
Позиции в инвентаризации
Пример данных для создания позиции в инвентаризации Из аттрибутов необходимо передать
quantity
. Связиstore-inventory
иproduct
обязательны.
{
"data":{
"type":"store-inventory-positions",
"attributes":{
"quantity":10
},
"relationships":{
"product":{
"data":{
"type":"products",
"id":7
}
},
"store-inventory":{
"data":{
"type":"store-inventories",
"id":7
}
}
}
}
}
JSON API type | store-inventory-positions |
URL | /api/v1/store-inventory-positions |
Список | GET /api/v1/store-inventory-positions |
Чтение | GET /api/v1/store-inventory-positions/{id} |
Создание | POST /api/v1/store-inventory-positions |
Редактирование | PATCH /api/v1/store-inventory-positions/{id} |
Удаление | DELETE /api/v1/store-inventory-positions/{id} |
Атрибуты
Имя | Тип | Пример | Запись | Описание |
---|---|---|---|---|
name | string |
Продукт 1 | нет | Название продукта |
quantity | float |
10.0 | да | Количество продукта в позиции |
real_quantity | float |
10.0 | нет | Реальное количество после проведения инвентаризации |
result | json |
{} | нет | Информация о нахождении товара |
Атрибут result
Пример хранящихся данных в атрибуте result Когда товара нет на складах, атрибут содержит пустое значени - {}
store_storage
- места хранения;name
- название места;quantity
- количество;not_distributed
- нераспределенное количество;store_complectation
- места комплектации.
{
"result": {
"store_storage": [
{
"name": "Палета 1",
"quantity": 32.0
}
],
"not_distributed": "5.0",
"store_complectation": [
{
"name": "Вывоз",
"quantity": 4.0
}
]
}
}
Связи
Название | Связь | JSON API type |
---|---|---|
Инвентаризация | store-inventory | store-inventories |
Продукт | product | products |
Дополнительные поля
Создание поля типа "текст"
curl "https://app.synergycrm.ru/api/v1/custom-fields" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data": {
"type": "custom-fields",
"attributes": {
"name": "Текстовое поле",
"resource-name": "companies",
"field-type": "text"
},
"relationships": {
"custom-field-category": {
"data": {
"type": "custom-field-categories",
"id": "2"
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/custom-fields");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\": {\"type\": \"custom-fields\",\"attributes\": {\"name\": \"Текстовое поле\",\"resource-name\": \"companies\",\"field-type\": \"text\"},\"relationships\": {\"custom-field-category\": {\"data\": {\"type\": \"custom-field-categories\",\"id\": \"2\"}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/custom-fields')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data": {
"type": "custom-fields",
"attributes": {
"name": "Текстовое поле",
"resource-name": "companies",
"field-type": "text"
},
"relationships": {
"custom-field-category": {
"data": {
"type": "custom-field-categories",
"id": "2"
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data": {
"type": "custom-fields",
"attributes": {
"name": "Текстовое поле",
"resource-name": "companies",
"field-type": "text"
},
"relationships": {
"custom-field-category": {
"data": {
"type": "custom-field-categories",
"id": "2"
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/custom-fields", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-fields',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data": {
"type": "custom-fields",
"attributes": {
"name": "Текстовое поле",
"resource-name": "companies",
"field-type": "text"
},
"relationships": {
"custom-field-category": {
"data": {
"type": "custom-field-categories",
"id": "2"
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/custom-fields"
payload = json.dumps({
"data": {
"type": "custom-fields",
"attributes": {
"name": "Текстовое поле",
"resource-name": "companies",
"field-type": "text"
},
"relationships": {
"custom-field-category": {
"data": {
"type": "custom-field-categories",
"id": "2"
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/custom-fields'));
request.body = json.encode({
"data": {
"type": "custom-fields",
"attributes": {
"name": "Текстовое поле",
"resource-name": "companies",
"field-type": "text"
},
"relationships": {
"custom-field-category": {
"data": {
"type": "custom-field-categories",
"id": "2"
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | custom-fields |
URL | /api/v1/custom-fields |
Список | GET /api/v1/custom-fields |
Чтение | GET /api/v1/custom-fields/{id} |
Создание | POST /api/v1/custom-fields |
Редактирование | PATCH /api/v1/custom-fields/{id} |
Удаление | DELETE /api/v1/custom-fields/{id} |
Атрибуты
Пример данных
{
"data": {
"id": "2",
"type": "custom-fields",
"attributes": {
"name": "Текстовое поле",
"resource-name": "companies",
"field-type": "text",
"params": {
"acts_like": "phone"
}
},
"relationships": {
"custom-field-category": {
"data": {
"type": "custom-field-categories",
"id": "2"
}
}
}
}
}
Основные атрибуты
Имя | Тип | Пример | Создание | Изменение | Описание |
---|---|---|---|---|---|
name | string |
Дополнительное текстовое поле | Да | Да | Название поля |
resource-name | string |
companies | Да | Нет | Тип ресурса (см. ниже) |
field-type | string |
text | Да | Нет | Тип поля (см. ниже) |
params | object |
{ "acts_like": "phone" } |
Да | Да | Доп. параметры (см. ниже) |
required | boolean |
true | Да | Да | Обязательность |
select-options | array |
["Апельсины", "Яблоки", "Груши"] |
Да | Да | Варианты для типа select |
tree-options | array |
[{ "id": "1", "text": "A", "children": [{ "id": "2", "text": "B", "children": [] }] }] |
Да | Да | Варианты для типа tree |
Значения field-type
Значение | Описание | Дополнительные параметры |
---|---|---|
text |
Текст (адрес, телефон, e-mail, ссылка) | Да, см. ниже |
number |
Число (величина, сумма в валюте) | Да, см. ниже |
date |
Дата | Да, см. ниже |
select |
Список | Пока что недоступны при создании через API |
external_select |
Список (внешний источник) | Пока что недоступны при создании через API |
file |
Файл | Пока что недоступны при создании через API |
formula |
Формула | Пока что недоступны при создании через API |
rating |
Рейтинг | Пока что недоступны при создании через API |
relation |
Связь | Пока что недоступны при создании через API |
multiple_relation |
Множественная связь | Пока что недоступны при создании через API |
weight |
Расчетный список | Пока что недоступны при создании через API |
tree |
Дерево | Пока что недоступны при создании через API |
exchange_rate |
Курс валют | Пока что недоступны при создании через API |
sequence |
Нумератор | Пока что недоступны при создании через API |
timer |
Таймер | Пока что недоступны при создании через API |
Значения params для полей типа "Текст"
Имя | Тип | Пример | Описание |
---|---|---|---|
acts_like | string | phone | Подвид поля, варианты: address , city , email , phone , region , text , url |
multiple | boolean | true | Ввод нескольких значений, только для подвида phone |
prefix | string | https:// | Префикс, только для подвида url |
beauty_phone | boolean | true | Приводить телефоны к системному виду (+7 xxx xxx-xx-xx), только для подвида phone |
Значения params для полей типа "Число"
Имя | Тип | Пример | Описание |
---|---|---|---|
only_integer | boolean | true | Только целые значения |
extension | string | кг | Единица измерения |
extension_type | string | unit | Тип единицы измерения, варианты: unit , currency , without_extension * |
*without_extension
нужен для сброса единиц измерения при редактировании
Значения params для полей типа "Дата"
Имя | Тип | Пример | Описание |
---|---|---|---|
with_time | boolean | true | Разрешать вводить время |
Связи
Пример данных
{
"data": {
"id": "2",
"type": "custom-fields",
"relationships": {
"custom-field-category": {
"links": {
"self": "/api/v1/custom-fields/2/relationships/custom-field-category",
"related": "/api/v1/custom-fields/2/custom-field-category"
},
"data": {
"type": "custom-field-categories",
"id": "2"
}
}
}
}
}
Пример запроса с загруженными источниками и отвественными
curl "https://app.synergycrm.ru/api/v1/custom-fields?include=custom-field-category" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/custom-fields?include=custom-field-category");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/custom-fields')
params = {
:include => 'custom-field-category',
}
uri.query = URI.encode_www_form(params)
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/custom-fields?include=custom-field-category", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-fields?include=custom-field-category',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/custom-fields?include=custom-field-category"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/custom-fields?include=custom-field-category'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Категория | custom-field-category | custom-field-categories |
Фильтры
Получить список полей для компаний
curl -G "https://app.synergycrm.ru/api/v1/custom-fields" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[resources]=companies"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/custom-fields?filter[resources]=companies");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/custom-fields?filter[resources]=companies')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/custom-fields?filter[resources]=companies", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/custom-fields?filter[resources]=companies',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/custom-fields?filter[resources]=companies"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/custom-fields?filter[resources]=companies'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Пример ответа поля с типом "текст"
{
"data": [
{
"id": "716",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/716"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "Текст",
"field-type": "text",
"required": false,
"resource-name": "companies",
"attribute-name": "custom-716",
"params": {
"multiple": "0",
"acts_like": "text",
"beauty_phone": "0"
}
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/716/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/716/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "число"
{
"data": [
{
"id": "717",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/717"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "Число",
"field-type": "number",
"required": true,
"resource-name": "companies",
"attribute-name": "custom-717",
"params": {
"extension": "кг",
"only_integer": "1",
"extension_type": "unit"
}
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/717/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/717/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "дата"
{
"data": [
{
"id": "718",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/718"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "Дата",
"field-type": "date",
"required": false,
"resource-name": "companies",
"attribute-name": "custom-718",
"params": {
"with_time": "1"
}
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/718/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/718/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "файл"
{
"data": [
{
"id": "719",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/719"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "Файл",
"field-type": "file",
"required": false,
"resource-name": "companies",
"attribute-name": "custom-719",
"params": {
"public_upload": "1"
}
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/719/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/719/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "список внешний источник"
{
"data": [
{
"id": "720",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/720"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "список внешний источник",
"field-type": "external_select",
"required": false,
"resource-name": "companies",
"attribute-name": "custom-720",
"params": {
"multiple": "1",
"password": "value",
"username": "value",
"color_key": "value",
"json_path": "value",
"label_key": "value",
"value_key": "value",
"external_source": "https://sire.ru"
}
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/720/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/720/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "список"
{
"data": [
{
"id": "721",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/721"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "Список",
"field-type": "select",
"required": false,
"resource-name": "companies",
"attribute-name": "custom-721",
"params": {
"colors": [
"#9b3178",
"#9f3e2d",
"#9e342e"
],
"values": [],
"options": [
"Первый",
"Второй",
"Третий"
],
"multiple": "1",
"display_as": "select"
},
"select-options": [
"Первый",
"Второй",
"Третий"
]
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/721/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/721/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "формула"
{
"data": [
{
"id": "711",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/711"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "Формула",
"field-type": "formula",
"required": false,
"resource-name": "companies",
"attribute-name": "custom-711",
"params": {
"formula": "<p><span class=\"label label-default fr-deletable\" contenteditable=\"false\" data-method=\"deal.amount\" data-time=\"1681972019977\">Сумма</span>* <span class=\"label label-default fr-deletable\" contenteditable=\"false\" data-method=\"deal.profit\" data-time=\"1681972028924\">Прибыль</span> / <span class=\"label label-default fr-deletable\" contenteditable=\"false\" data-method=\"deal.cost\" data-time=\"1681972038442\">Себестоимость</span> </p>",
"dependencies": {
"Deal": [
"amount",
"profit",
"cost"
]
}
}
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/711/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/711/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "рейтинг"
{
"data": [
{
"id": "740",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/740"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "рейтинг",
"field-type": "rating",
"required": false,
"resource-name": "companies",
"attribute-name": "custom-740",
"params": {} ## значение от 1 до 5
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/740/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/740/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "связь"
{
"data": [
{
"id": "741",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/741"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "связь",
"field-type": "relation",
"required": false,
"resource-name": "companies",
"attribute-name": "custom-741",
"params": {
"relation_class": "Deal"
}
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/741/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/741/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "множественная связь"
{
"data": [
{
"id": "713",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/713"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "Множественная связь",
"field-type": "multiple_relation",
"required": false,
"resource-name": "companies",
"attribute-name": "custom-713",
"params": {
"read_all": "1",
"relation_class": "Deal"
}
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/713/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/713/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "нумератор"
{
"data": [
{
"id": "742",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/742"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "нумератор",
"field-type": "sequence",
"required": false,
"resource-name": "companies",
"attribute-name": "custom-742",
"params": {
"mask": "2023-1-А",
"start_number": 1,
"auto_sequence": "1",
"sequence_group": "year"
}
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/742/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/742/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "дерево"
{
"data": [
{
"id": "714",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/714"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "Дерево",
"field-type": "tree",
"required": true,
"resource-name": "companies",
"attribute-name": "custom-714",
"params": {
"multiple": "1"
},
"tree-options": [
{
"id": 1066,
"name": "Пункт 1",
"childs": [
{
"id": 1067,
"name": "Пункт 1.1",
"childs": [
{
"id": 1068,
"name": "Пункт 1.1.1",
"childs": []
}
]
},
{
"id": 1069,
"name": "Пункт 1.2",
"childs": [
{
"id": 1070,
"name": "Пункт 1.2.1",
"childs": []
},
{
"id": 1071,
"name": "Пункт 1.2.2",
"childs": []
}
]
}
]
}
]
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/714/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/714/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "курс валюты"
{
"data": [
{
"id": "715",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/715"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "Курс Валюты",
"field-type": "exchange_rate",
"required": false,
"resource-name": "companies",
"attribute-name": "custom-715",
"params": {
"currency": "14"
}
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/715/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/715/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Пример ответа поля с типом "таймер"
{
"data": [
{
"id": "743",
"type": "custom-fields",
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/743"
},
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "таймер",
"field-type": "timer",
"required": false,
"resource-name": "companies",
"attribute-name": "custom-743",
"params": {
"time_unit": "hours"
}
},
"relationships": {
"custom-field-category": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/custom-fields/743/relationships/custom-field-category",
"related": "https://app.synergycrm.ru/api/v1/custom-fields/743/custom-field-category"
}
}
}
}
],
"meta": {
"record-count": 1,
"page-count": 1
},
"links": {
"first": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50",
"last": "https://app.synergycrm.ru/api/v1/custom-fields?filter%5Bresources%5D=companies&page%5Bnumber%5D=1&page%5Bsize%5D=50"
}
}
Фильтр | Описание | Пример |
---|---|---|
resources | Тип ресурса для которого создано поле | filter[resources]=companies |
field-type | Тип поля (все типы см. выше в разделе "Значения field-type") | filter[field-type]=text |
Почтовые аккаунты
Создание нового аккаунта
curl "https://app.synergycrm.ru/api/v1/mail-accounts" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data": {
"type": "mail-accounts",
"attributes": {
"name": "Название",
"address": "test@mail.ru",
"imap-login": "test@mail.ru",
"imap-password": "Qwe123",
"imap-host": "example.ru",
"imap-port": 143,
"imap-ssl": false,
"smtp-login": "test@mail.ru",
"smtp-password": "Qwe123",
"smtp-host": "example.ru",
"smtp-port": 25,
"smtp-ssl": false,
"smtp-verify-ssl": false,
"user-ids": [
1
]
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/mail-accounts");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\": {\"type\": \"mail-accounts\",\"attributes\": {\"name\": \"Название\",\"address\": \"test@mail.ru\",\"imap-login\": \"test@mail.ru\",\"imap-password\": \"Qwe123\",\"imap-host\": \"example.ru\",\"imap-port\": 143,\"imap-ssl\": false,\"smtp-login\": \"test@mail.ru\",\"smtp-password\": \"Qwe123\",\"smtp-host\": \"example.ru\",\"smtp-port\": 25,\"smtp-ssl\": false,\"smtp-verify-ssl\": false,\"user-ids\": [1]}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/mail-accounts')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data": {
"type": "mail-accounts",
"attributes": {
"name": "Название",
"address": "test@mail.ru",
"imap-login": "test@mail.ru",
"imap-password": "Qwe123",
"imap-host": "example.ru",
"imap-port": 143,
"imap-ssl": false,
"smtp-login": "test@mail.ru",
"smtp-password": "Qwe123",
"smtp-host": "example.ru",
"smtp-port": 25,
"smtp-ssl": false,
"smtp-verify-ssl": false,
"user-ids": [
1
]
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data": {
"type": "mail-accounts",
"attributes": {
"name": "Название",
"address": "test@mail.ru",
"imap-login": "test@mail.ru",
"imap-password": "Qwe123",
"imap-host": "example.ru",
"imap-port": 143,
"imap-ssl": false,
"smtp-login": "test@mail.ru",
"smtp-password": "Qwe123",
"smtp-host": "example.ru",
"smtp-port": 25,
"smtp-ssl": false,
"smtp-verify-ssl": false,
"user-ids": [
1
]
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/mail-accounts", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/mail-accounts',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data": {
"type": "mail-accounts",
"attributes": {
"name": "Название",
"address": "test@mail.ru",
"imap-login": "test@mail.ru",
"imap-password": "Qwe123",
"imap-host": "example.ru",
"imap-port": 143,
"imap-ssl": false,
"smtp-login": "test@mail.ru",
"smtp-password": "Qwe123",
"smtp-host": "example.ru",
"smtp-port": 25,
"smtp-ssl": false,
"smtp-verify-ssl": false,
"user-ids": [
1
]
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/mail-accounts"
payload = json.dumps({
"data": {
"type": "mail-accounts",
"attributes": {
"name": "Название",
"address": "test@mail.ru",
"imap-login": "test@mail.ru",
"imap-password": "Qwe123",
"imap-host": "example.ru",
"imap-port": 143,
"imap-ssl": false,
"smtp-login": "test@mail.ru",
"smtp-password": "Qwe123",
"smtp-host": "example.ru",
"smtp-port": 25,
"smtp-ssl": false,
"smtp-verify-ssl": false,
"user-ids": [
1
]
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/mail-accounts'));
request.body = json.encode({
"data": {
"type": "mail-accounts",
"attributes": {
"name": "Название",
"address": "test@mail.ru",
"imap-login": "test@mail.ru",
"imap-password": "Qwe123",
"imap-host": "example.ru",
"imap-port": 143,
"imap-ssl": false,
"smtp-login": "test@mail.ru",
"smtp-password": "Qwe123",
"smtp-host": "example.ru",
"smtp-port": 25,
"smtp-ssl": false,
"smtp-verify-ssl": false,
"user-ids": [
1
]
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
JSON API type | mail-accounts |
URL | /api/v1/mail-accounts |
Список | GET /api/v1/mail-accounts |
Чтение | GET /api/v1/mail-accounts/{id} |
Создание | POST /api/v1/mail-accounts |
Редактирование | PATCH /api/v1/mail-accounts/{id} |
Удаление | DELETE /api/v1/mail-accounts/{id} |
Атрибуты
Пример данных
{
"data": {
"id": "1",
"type": "mail-accounts",
"attributes": {
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"name": "ФИО",
"address": "test@mail.ru",
"imap-login": "test@mail.ru",
"imap-host": "imap.example.com",
"imap-port": "143",
"imap-ssl": false,
"imap-status": "completed",
"smtp-login": "test@mail.ru",
"smtp-host": "test@mail.ru",
"smtp-port": "25",
"smtp-ssl": false,
"smtp-verify-ssl": false,
"smtp-status": "completed",
"signature": "Подпись",
"signature-before-quote": false,
"sync-folders-at": "2022-02-22T12:02:22.222+03:00",
"auto-create-contact": true,
"auto-contact-after-reply": false,
"auto-responsible": false,
"active": true,
"enable-starttls-auto": true
}
}
}
Основные атрибуты
Имя | Тип | Пример | Создание | Изменение | Просмотр | Описание |
---|---|---|---|---|---|---|
name | string | ФИО | Да | Да | Да | Имя отправителя |
address | string | test@mail.ru | Да | Да | Да | Адрес |
imap-login | string | test@mail.ru | Да | Да | Да | Логин для imap-сервера |
imap-password | string | correcthorsebatterystaple | Да | Да | Нет | Пароль для imap-сервера |
imap-host | string | imap.example.com | Да | Да | Да | Hostname imap-сервера |
imap-port | integer | 143 | Да | Да | Да | Порт imap-сервера |
imap-ssl | boolean | true | Да | Да | Да | Подключаться к imap-серверу через SSL |
imap-status | string | completed | Нет | Нет | Да | Статус imap-подключения |
smtp-login | string | test@mail.ru | Да | Да | Да | Логин для smtp-сервера |
smtp-password | string | correcthorsebatterystaple | Да | Да | Нет | Пароль для smtp-сервера |
smtp-host | string | smtp.example.com | Да | Да | Да | Hostname smtp-сервера |
smtp-port | integer | 25 | Да | Да | Да | Порт smtp-сервера |
smtp-ssl | boolean | true | Да | Да | Да | Подключаться к smtp-серверу через SSL |
smtp-verify-ssl | boolean | true | Да | Да | Да | Проверять сертификат при подключении к smtp-серверу |
smtp-status | string | completed | Нет | Нет | Да | Статус smtp-подключения |
enable-starttls-auto | boolean | true | Да | Да | Да | Проверяет включен ли STARTTLS на smtp-сервере |
signature | string | Подпись | Да | Да | Да | Подпись |
signature-before-quote | boolean | true | Да | Да | Да | Подпись перед цитатой |
sync-folders-at | date | 2022-02-22T12:02:22.222+03:00 | Нет | Нет | Да | Дата и время последней синхронизации |
auto-create-contact | boolean | true | Да | Да | Да | Создавать контакт при получении |
auto-contact-after-reply | boolean | true | Да | Да | Да | Создавать контакт после ответа |
auto-responsible | boolean | true | Да | Да | Да | Автоматически подставить ответственного |
active | boolean | true | Да | Да | Да | Активен / неактивен |
user-ids | array | [1, 2, 3] | Да | Да | Нет* | Список пользователей, которые могут управлять аккаунтом |
*Список можно получить через связь users
Связи
Пример данных
{
"data": {
"id": "2",
"type": "mail-accounts",
"relationships": {
"user": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/mail-accounts/2/relationships/user",
"related": "https://app.synergycrm.ru/api/v1/mail-accounts/2/user"
}
},
"users": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/mail-accounts/2/relationships/users",
"related": "https://app.synergycrm.ru/api/v1/mail-accounts/2/users"
}
},
"messages": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/mail-accounts/2/relationships/messages",
"related": "https://app.synergycrm.ru/api/v1/mail-accounts/2/messages"
}
}
}
}
}
Пример запроса с загруженными владельцами
curl "https://app.synergycrm.ru/api/v1/mail-accounts?include=user" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/mail-accounts?include=user");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/mail-accounts')
params = {
:include => 'user',
}
uri.query = URI.encode_www_form(params)
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/mail-accounts?include=user", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/mail-accounts?include=user',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/mail-accounts?include=user"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/mail-accounts?include=user'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Владелец | user | users |
Пользователи, имеющие доступ к ящику | users | users |
Письма | messages | mail-messages |
Почтовые сообщения
Отправка письма
curl "https://app.synergycrm.ru/api/v1/mail-messages" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data": {
"type": "mail-messages",
"attributes": {
"to": [
{
"name": "Имя",
"address": "test@mail.ru"
}
],
"subject": "Тема письма",
"body": "<!DOCTYPE html><html><body>test</body></html>"
},
"relationships": {
"mail-account": {
"data": {
"type": "mail-accounts",
"id": 2
}
}
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/mail-messages");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\": {\"type\": \"mail-messages\",\"attributes\": {\"to\": [{\"name\": \"Имя\",\"address\": \"test@mail.ru\"}],\"subject\": \"Тема письма\",\"body\": \"<!DOCTYPEhtml><html><body>test</body></html>\"},\"relationships\": {\"mail-account\": {\"data\": {\"type\": \"mail-accounts\",\"id\": 2}}}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/mail-messages')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data": {
"type": "mail-messages",
"attributes": {
"to": [
{
"name": "Имя",
"address": "test@mail.ru"
}
],
"subject": "Тема письма",
"body": "<!DOCTYPE html><html><body>test</body></html>"
},
"relationships": {
"mail-account": {
"data": {
"type": "mail-accounts",
"id": 2
}
}
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data": {
"type": "mail-messages",
"attributes": {
"to": [
{
"name": "Имя",
"address": "test@mail.ru"
}
],
"subject": "Тема письма",
"body": "<!DOCTYPE html><html><body>test</body></html>"
},
"relationships": {
"mail-account": {
"data": {
"type": "mail-accounts",
"id": 2
}
}
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/mail-messages", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/mail-messages',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data": {
"type": "mail-messages",
"attributes": {
"to": [
{
"name": "Имя",
"address": "test@mail.ru"
}
],
"subject": "Тема письма",
"body": "<!DOCTYPE html><html><body>test</body></html>"
},
"relationships": {
"mail-account": {
"data": {
"type": "mail-accounts",
"id": 2
}
}
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/mail-messages"
payload = json.dumps({
"data": {
"type": "mail-messages",
"attributes": {
"to": [
{
"name": "Имя",
"address": "test@mail.ru"
}
],
"subject": "Тема письма",
"body": "<!DOCTYPE html><html><body>test</body></html>"
},
"relationships": {
"mail-account": {
"data": {
"type": "mail-accounts",
"id": 2
}
}
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/mail-messages'));
request.body = json.encode({
"data": {
"type": "mail-messages",
"attributes": {
"to": [
{
"name": "Имя",
"address": "test@mail.ru"
}
],
"subject": "Тема письма",
"body": "<!DOCTYPE html><html><body>test</body></html>"
},
"relationships": {
"mail-account": {
"data": {
"type": "mail-accounts",
"id": 2
}
}
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Пример ответа
{
"data": {
"type": "mail-queue-jobs",
"id": "578c7b51-3d28-4266-9b6d-31f3399c117c",
"attributes": {
"status": "pending",
"action": "create"
},
"links": {
"self": "https://app.synergycrm.ru/api/v1/mail-queue-jobs/578c7b51-3d28-4266-9b6d-31f3399c117c"
}
}
}
JSON API type | mail-messages |
URL | /api/v1/mail-messages |
Список | GET /api/v1/mail-messages |
Чтение | GET /api/v1/mail-messages/{id} |
Создание | POST /api/v1/mail-messages |
Удаление | DELETE /api/v1/mail-messages/{id} |
Атрибуты
Пример данных
{
"created-at": "2022-02-22T12:02:22.222+03:00",
"updated-at": "2022-02-22T12:02:22.222+03:00",
"cached-at": "2022-02-22T12:02:22.222+03:00",
"from": [
{
"name": "Имя отправителя",
"address": "test@mail.ru"
}
],
"to": [
{
"name": "Имя получателя",
"address": "test@mail.com"
}
],
"subject": "Тема письма",
"body": "<!DOCTYPE html><html><body>test</body></html>",
"uid": "222",
"message-id": null,
"full-size": null,
"direction": "outcoming",
"envelope": {},
"flags": [],
"internaldate": "2022-02-22T12:02:22.222+03:00",
"reply-to": null,
"cc": null,
"bcc": null,
"previous-responsible-id": null
}
Основные атрибуты
Имя | Тип | Пример | Создание | Просмотр | Описание |
---|---|---|---|---|---|
from | array/string | [ { "name": "Имя", "address": "test@mail.ru" } ] / test@mail.ru |
Нет | Да | Данные отправителя |
to | array/string | [ { "name": "Имя", "address": "test@mail.ru" } ] / test@mail.ru |
Да | Да | Данные получателя |
cc | array/string | [ { "name": "Имя", "address": "test@mail.ru" } ] / test@mail.ru |
Да | Да | Копия |
bcc | array/string | [ { "name": "Имя", "address": "test@mail.ru" } ] / test@mail.ru |
Да | Да | Скрытая копия |
subject | string | Message subject | Да | Да | Тема письма |
body | string | Hello! | Да | Да* | Тело письма |
uid | string | 123 | Нет | Да | Идентификатор письма на почтовом сервере |
message-id | string | <1234-4121@domain> |
Нет | Да | Уникальный идентификатор письма |
direction | string | outgoing | Нет | Да | Направление отправки (входящее-исходящее) |
*Только при запросе письма по id, в списке тело не отображается
Связи
Пример данных
{
"responsible": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/mail-messages/2/relationships/responsible",
"related": "https://app.synergycrm.ru/api/v1/mail-messages/2/responsible"
}
},
"user": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/mail-messages/2/relationships/user",
"related": "https://app.synergycrm.ru/api/v1/mail-messages/2/user"
}
},
"mail-account": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/mail-messages/2/relationships/mail-account",
"related": "https://app.synergycrm.ru/api/v1/mail-messages/2/mail-account"
}
},
"contacts": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/mail-messages/2/relationships/contacts",
"related": "https://app.synergycrm.ru/api/v1/mail-messages/2/contacts"
}
},
"companies": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/mail-messages/2/relationships/companies",
"related": "https://app.synergycrm.ru/api/v1/mail-messages/2/companies"
}
},
"deals": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/mail-messages/2/relationships/deals",
"related": "https://app.synergycrm.ru/api/v1/mail-messages/2/deals"
}
},
"orders": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/mail-messages/2/relationships/orders",
"related": "https://app.synergycrm.ru/api/v1/mail-messages/2/orders"
}
},
"products": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/mail-messages/2/relationships/products",
"related": "https://app.synergycrm.ru/api/v1/mail-messages/2/products"
}
},
"users": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/mail-messages/2/relationships/users",
"related": "https://app.synergycrm.ru/api/v1/mail-messages/2/users"
}
},
"checkups": {
"links": {
"self": "https://app.synergycrm.ru/api/v1/mail-messages/2/relationships/checkups",
"related": "https://app.synergycrm.ru/api/v1/mail-messages/2/checkups"
}
}
}
Пример запроса с загруженными аккаунтами
curl "https://app.synergycrm.ru/api/v1/mail-messages?include=mail-account" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/mail-messages?include=mail-account");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/mail-messages')
params = {
:include => 'mail-account',
}
uri.query = URI.encode_www_form(params)
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/mail-messages?include=mail-account", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/mail-messages?include=mail-account',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/mail-messages?include=mail-account"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/mail-messages?include=mail-account'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Каждая связь может быть включена в JSON ответ через параметр include
, согласно
официальной спецификации JSON API Inclusion of Related Resources.
Название | Связь | JSON API type |
---|---|---|
Ответственный | responsible | users |
Создатель | user | users |
Почтовый аккаунт | mail-account | mail-accounts |
Компании | companies | companies |
Контакты | contacts | contacts |
Сделки | deals | deals |
Продукты | products | products |
Заявки | orders | orders |
Сотрудники | users | users |
Осмотры | checkups | checkups |
Фильтры
Получить все письма определенного аккаунта
curl -G "https://app.synergycrm.ru/api/v1/mail-messages" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[mail-account-id]=2"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/mail-messages?filter[mail-account-id]=2");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/mail-messages?filter[mail-account-id]=2')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/mail-messages?filter[mail-account-id]=2", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/mail-messages?filter[mail-account-id]=2',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/mail-messages?filter[mail-account-id]=2"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/mail-messages?filter[mail-account-id]=2'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
responsible-id | Ответственный | filter[responsible-id]=123 |
mail-account-id | Почтовый аккаунт | filter[mail-account-id]=123 |
Статусы фоновых операций
Запрос статуса операции
curl "https://app.synergycrm.ru/api/v1/mail-queue-jobs/9da99faa-8d36-487b-bbe1-8ac2673e8a03" \
-H "Authorization: Bearer api_token"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/mail-queue-jobs/9da99faa-8d36-487b-bbe1-8ac2673e8a03");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/mail-queue-jobs/9da99faa-8d36-487b-bbe1-8ac2673e8a03')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/mail-queue-jobs/9da99faa-8d36-487b-bbe1-8ac2673e8a03", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/mail-queue-jobs/9da99faa-8d36-487b-bbe1-8ac2673e8a03',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/mail-queue-jobs/9da99faa-8d36-487b-bbe1-8ac2673e8a03"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/mail-queue-jobs/9da99faa-8d36-487b-bbe1-8ac2673e8a03'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Пример ответа
{
"data": {
"type": "mail-queue-jobs",
"id": "578c7b51-3d28-4266-9b6d-31f3399c117c",
"attributes": {
"status": "pending",
"action": "create"
},
"links": {
"self": "https://app.synergycrm.ru/api/v1/mail-queue-jobs/578c7b51-3d28-4266-9b6d-31f3399c117c"
}
}
}
JSON API type | mail-queue-jobs |
URL | /api/v1/mail-queue-jobs |
Чтение | GET /api/v1/mail-queue-jobs/{id} |
При отправке или удалении писем, в ответ вернется тип mail-queue-jobs
. Поле data.links.self
будет содержать ссылку, по которой можно узнать статус отправки.
При успешной операции, статус ответа будет 303 See Other
, а заголовок Location
будет содержать ссылку на конкретное письмо.
Автоматизации
JSON API type | scenarios |
URL | /api/v1/scenarios |
Список | GET /api/v1/scenarios |
Чтение | GET /api/v1/scenarios/{id} |
Запуск | GET /api/v1/scenarios/{id}/run |
Атрибуты
Пример данных
{
"created-at": "2022-02-22T12:22:22.222+03:00",
"updated-at": "2022-02-22T12:22:22.222+03:00",
"cached-at": "2022-02-22T12:22:22.222+03:00",
"name": "Создание сделки",
"action": "create",
"class-name": "Deal",
"active": true,
"options": {
"user_id": 1
},
"manual-required-fields": null
}
Основные атрибуты
Имя | Тип | Пример | Список | Чтение | Описание |
---|---|---|---|---|---|
name | string | Создание сделки | Да | Да | Название сценария |
action | string | create | Да | Да | Условие запуска сценария |
class-name | string | Deal | Да | Да | Тип сущности |
active | boolean | true | Да | Да | Включен / выключен |
options | object | {} | Да | Да | Дополнительные параметры сценария |
manual-required-fields | array | ["custom_123"] | Да | Да | Обязательные поля для кнопочных сценариев |
conditions | array | [{ "type": "changed", "attribute": "custom_123" }] | Нет | Да | Дополнительные условия |
callbacks | array | [{ "type": "update", "options": { "attribute": "custom_123", "value": "456" }}] | Нет | Да | Действия сценария |
Условия запуска сценария
Значение | Условие |
---|---|
create | при создании |
update | при изменении |
schedule | расписание |
manual | кнопочный |
chain | из другого сценария |
Фильтры
Получить все сценарии по сделкам
curl -G "https://app.synergycrm.ru/api/v1/scenarios" \
-X GET \
-H "Authorization: Bearer api_token" \
--data-urlencode "filter[class-name]=Deal"
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/scenarios?filter[class-name]=Deal");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("GET");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/scenarios?filter[class-name]=Deal')
req = Net::HTTP::Get.new(uri)
req['Authorization'] = 'Bearer api_token'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://app.synergycrm.ru/api/v1/scenarios?filter[class-name]=Deal", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/scenarios?filter[class-name]=Deal',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/scenarios?filter[class-name]=Deal"
payload={}
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('GET', Uri.parse('https://app.synergycrm.ru/api/v1/scenarios?filter[class-name]=Deal'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
Фильтр | Описание | Пример |
---|---|---|
class-name | Тип сущности | filter[class-name]=Company |
action | Условие запуска | filter[action]=update |
active | Активен / неактивен | filter[active]=true |
Запуск сценариев
Запустить сценарий с id 2 по сделке с id 22
curl "https://app.synergycrm.ru/api/v1/scenarios/2/run" \
-X POST \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Bearer api_token" \
-d @- << EOF
{
"data": {
"type": "scenarios",
"id": "2",
"attributes": {
"entity-id": "22",
"entity-type": "deals"
}
}
}
EOF
Пример на Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
class Main {
public static void main(String[] args) throws IOException {
URL url = new URL("https://app.synergycrm.ru/api/v1/scenarios/2/run");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("Content-Type", "application/vnd.api+json");
httpConn.setRequestProperty("Authorization", "Bearer api_token");
httpConn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());
writer.write("{\"data\": {\"type\": \"scenarios\",\"id\": \"2\",\"attributes\": {\"entity-id\": \"22\",\"entity-type\": \"deals\"}}}");
writer.flush();
writer.close();
httpConn.getOutputStream().close();
InputStream responseStream = httpConn.getResponseCode() / 100 == 2
? httpConn.getInputStream()
: httpConn.getErrorStream();
Scanner s = new Scanner(responseStream).useDelimiter("\\A");
String response = s.hasNext() ? s.next() : "";
System.out.println(response);
}
}
Пример на Ruby
require 'net/http'
uri = URI('https://app.synergycrm.ru/api/v1/scenarios/2/run')
req = Net::HTTP::Post.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'
req.body = '{
"data": {
"type": "scenarios",
"id": "2",
"attributes": {
"entity-id": "22",
"entity-type": "deals"
}
}
}'
req_options = {
use_ssl: uri.scheme == "https"
}
res = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(req)
end
Пример на GO
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{
"data": {
"type": "scenarios",
"id": "2",
"attributes": {
"entity-id": "22",
"entity-type": "deals"
}
}
}`)
req, err := http.NewRequest("POST", "https://app.synergycrm.ru/api/v1/scenarios/2/run", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Content-Type", "application/vnd.api+json")
req.Header.Set("Authorization", "Bearer api_token")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
Пример на PHP
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://app.synergycrm.ru/api/v1/scenarios/2/run',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data": {
"type": "scenarios",
"id": "2",
"attributes": {
"entity-id": "22",
"entity-type": "deals"
}
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/vnd.api+json',
'Authorization: Bearer api_token'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Пример на Python
import requests
import json
url = "https://app.synergycrm.ru/api/v1/scenarios/2/run"
payload = json.dumps({
"data": {
"type": "scenarios",
"id": "2",
"attributes": {
"entity-id": "22",
"entity-type": "deals"
}
}
})
headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_token'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Пример на Dart
import 'dart:convert';
import 'package:http/http.dart' as http;void main() async {
var headers = {
'Content-Type': 'application/vnd.api+json',
'Authorization': 'Bearer api_key'
};
var request = http.Request('POST', Uri.parse('https://app.synergycrm.ru/api/v1/scenarios/2/run'));
request.body = json.encode({
"data": {
"type": "scenarios",
"id": "2",
"attributes": {
"entity-id": "22",
"entity-type": "deals"
}
}
});
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
}
При успешном запуске сценария вернется статус 202 Accepted
без тела ответа.
Коды ошибок
Код | Значение |
---|---|
1001 |
Не выполнены условия запуска сценария |
1002 |
Заполнены не все обязательные поля |
В meta
у ошибки 1002
можно увидеть список всех обязательных полей для данного сценария.