NAV Navbar
Logo
Java Ruby Go PHP Python C#

Введение

Спасибо за выбор 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.syncrm.ru/api/v1/deals?page[number]=2.

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

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

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

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

Авторизация

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

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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) 

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/deals");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

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

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

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

Authorization: Bearer access_api_token

Контакты

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

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/contacts");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"contacts\",\"attributes\":{\"first-name\":\"Иван\",\"last-name\":\"Иванов\"},\"relationships\":{\"source\":{\"data\":{\"type\":\"sources\",\"id\":\"2\"}},\"responsible\":{\"data\":{\"type\":\"users\",\"id\":\"2\"}}}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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":"Иванов",
        "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":null
      }
   }
}

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

Имя Тип Пример Запись Описание
first-name* string Иван да Имя
last-name* string Иванов да Фамилия
middle-name string Иванович да Отчество
description string Описание да Описание
general-phone string +79876543211 да Телефон (основной)
mobile-phone string +79876543211 да Телефон (мобильный)
work-phone string +79876543211 да Телефон (рабочий)
work-phone-postfix string 200 да Добавочный (рабочий)
other-phone string +79876543211 да Телефон (дополнительный)
other-phone-postfix string 200 да Добавочный (дополнительный)
fax string +79876543211 да Факс
email string help@syncrm.ru да E-mail адрес
other-email string help@syncrm.ru да E-mail адрес (дополнительный)
website string syncrm.ru да Сайт
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 да Дата архивации

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

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

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

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

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

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

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

Связи

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

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

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

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/contacts?include=responsible,contact-type");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

Каждая связь может быть включена в 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

Фильтры

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

curl -G "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/contacts?filter[work_phone]=79876543211");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
last-name Вывести контакты по определенному last-name filter[last-name]=Ivanov
first-name Вывести контакты по определенному first-name filter[first-name]=Ivan
middle-name Вывести контакты по определенному middle-name filter[middle-name]=Ivanovich
work-phone Вывести контакты по определенному work-phone filter[work_phone]=+79876543211
mobile-phone Вывести контакты по определенному mobile-phone filter[mobile_phone]=+79876543211
other-phone Вывести контакты по определенному other-phone filter[other_phone]=+79876543211
any-phone Вывести контакты, в которых из одном из телефонных полей хранится значение any-phone filter[any_phone]=+79876543211
email Вывести контакты по определенному email filter[email]=support@syncrm.ru
other-email Вывести контакты по определенному other-email filter[other-email]=support@syncrm.ru
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/contact-statuses");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"contact-statuses\",\"attributes\":{\"name\":\"Статус контакта в API\",\"color\":\"#000000\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/contact-statuses?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/contact-types");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"contact-types\",\"attributes\":{\"name\":\"Тип контакта в API\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/contact-types?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/contracts");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"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.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/contracts?include=companies,orders");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

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

Название Связь JSON API type
Сторона 1 first-party companies, contacts
Сторона 2 second-party companies, contacts
Создатель user users
Компании companies companies
Контакты contacts contacts
Сделки deals deals
Заявки orders orders
Объекты недвижимости estate-properties estate-properties

Фильтры

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

curl -G "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/contracts?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
number Вывести договор с указанным номером filter[number]=22
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]=22
q Вывести договоры по поисковому запросу filter[q]=some-query
archived Вывести договоры в архиве filter[archived]=2
discarded Вывести договоры в корзине filter[discarded]=2
actual Вывести договоры объекты filter[actual]=2

Компании

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

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/companies");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"companies\",\"attributes\":{\"name\":\"ООО Синергия Софт\",\"description\":\"Разработка компьютерного программного обеспечения\"},\"relationships\":{\"source\":{\"data\":{\"type\":\"sources\",\"id\":\"2\"}},\"responsible\":{\"data\":{\"type\":\"users\",\"id\":\"2\"}}}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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": ""
        },
        "archived-at": null
      }
   }
}

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

Имя Тип Пример Запись Описание
name* string ООО Синергия Софт да Название
description string Разработка компьютерного программного обеспечения да Описание
general-phone string +79876543211 да Телефон (основной)
mobile-phone string +79876543211 да Телефон (мобильный)
work-phone string +79876543211 да Телефон (рабочий)
work-phone-postfix string 200 да Добавочный (рабочий)
other-phone string +79876543211 да Телефон (дополнительный)
other-phone-postfix string 200 да Добавочный (дополнительный)
fax string +79876543211 да Факс
email string help@syncrm.ru да E-mail адрес
other-email string help@syncrm.ru да E-mail адрес (дополнительный)
website string syncrm.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 да Дата архивации

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

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

Имя Тип Пример Запись Описание
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 Генеральный директор да Должность руководителя

Связи

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

{
    "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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/companies?include=responsible,company-type");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

Установить статус у компании

curl "https://app.syncrm.ru/api/v1/companies/101010" \
  -X PATCH \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Bearer api_token" \
  -d @- << EOF
{
  "data": {
    "id": "101010",
    "type": "companies",
    "relationships": {
      "status": {
        "data": {
          "type": "company-statuses",
          "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.syncrm.ru/api/v1/companies/101010");
		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\": \"101010\",\"type\": \"companies\",\"relationships\": {\"status\": {\"data\": {\"type\": \"company-statuses\",\"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.syncrm.ru/api/v1/companies/101010')
req = Net::HTTP::Patch.new(uri)
req.content_type = 'application/vnd.api+json'
req['Authorization'] = 'Bearer api_token'

req.body = '{
  "data": {
    "id": "101010",
    "type": "companies",
    "relationships": {
      "status": {
        "data": {
          "type": "company-statuses",
          "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": {
    "id": "101010",
    "type": "companies",
    "relationships": {
      "status": {
        "data": {
          "type": "company-statuses",
          "id": "222"
        }
      }
    }
  }
}`)
	req, err := http.NewRequest("PATCH", "https://app.syncrm.ru/api/v1/companies/101010", 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.syncrm.ru/api/v1/companies/101010',
  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": "101010",
    "type": "companies",
    "relationships": {
      "status": {
        "data": {
          "type": "company-statuses",
          "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.syncrm.ru/api/v1/companies/101010"

payload = json.dumps({
  "data": {
    "id": "101010",
    "type": "companies",
    "relationships": {
      "status": {
        "data": {
          "type": "company-statuses",
          "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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Patch, "https://app.syncrm.ru/api/v1/companies/101010");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\": {\"id\": \"101010\",\"type\": \"companies\",\"relationships\": {\"status\": {\"data\": {\"type\": \"company-statuses\",\"id\": \"222\"}}}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

Каждая связь может быть включена в 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

Фильтры

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

curl -G "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/companies?filter[general_phone]=79876543211");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
inn Вывести компании по определенному номеру ИНН filter[inn]=0101010101
kpp Вывести компании по определенному номеру КПП filter[kpp]=010101010
work-phone Вывести компании по определенному work-phone filter[work_phone]=+79876543211
general-phone Вывести компании по определенному general-phone filter[general_phone]=+79876543211
other-phone Вывести компании по определенному other-phone filter[other_phone]=+79876543211
any-phone Вывести компании в которых из одном из телефонных полей хранится значение any-phone filter[any_phone]=+79876543211
email Вывести компании по определенному email filter[email]=support@syncrm.ru
other-email Вывести компании по определенному other-email filter[other-email]=support@syncrm.ru
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/company-bank-details");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"company-bank-details\",\"attributes\":{\"name\":\"МОЕ НАЗВАНИЕ БАНКОВСКИХ РЕКВИЗИТОВ\"},\"relationships\":{\"company\":{\"data\":{\"type\":\"companies\",\"id\":2}}}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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
      }
  }
}
Имя Тип Пример Запись Описание
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 нет Дата обновления

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

Связи

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

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/companies/2/relationships/bank-details");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Название Связь JSON API type
Компания company companies

Статусы

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

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/company-statuses");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"company-statuses\",\"attributes\":{\"name\":\"Статус компании из API\",\"color\":\"#000000\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/company-statuses?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/company-types");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"company-types\",\"attributes\":{\"name\":\"Тип компании из API\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/company-types?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/deals");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"deals\",\"attributes\":{\"name\":\"Сделка по API\",\"planned-at\":\"2022-02-22\"},\"relationships\":{\"source\":{\"data\":{\"type\":\"sources\",\"id\":\"2\"}}}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

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

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/deals");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"deals\",\"attributes\":{\"name\":\"Сделка по API с привязанной заявкой\"},\"relationships\":{\"orders\": {\"data\" : [{\"type\": \"orders\",\"id\": 22222}]}}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

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

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/deals");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"deals\",\"attributes\":{\"name\":\"Сделка по API с привязанными продуктами\"},\"relationships\":{\"products\": {\"data\" : [{\"type\": \"products\",\"id\": 2222}, {\"type\": \"products\",\"id\": 222}]}}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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
    }
  }
}
Имя Тип Пример Запись Описание
name string Моя сделка да Имя сделки
description 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 да Фактическая дата закрытия
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 да Дата архивации

Связи

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

{
  "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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/deals?include=source,responsible");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

Каждая связь может быть включена в 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

Фильтры

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

curl -G "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/deals?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/deal-loss-reasons");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"deal-loss-reasons\",\"attributes\":{\"name\":\"Причины поражения из API\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/deal-loss-reasons?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/deal-stage-categories");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"deal-stage-categories\",\"attributes\":{\"name\":\"Воронка сделок из API\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/deal-stage-categories?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/deal-stages");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"deal-stages\",\"attributes\":{\"name\":\"Этап сделки в API\"},\"relationships\":{ \"deal-stage-category\":{\"data\": { \"type\": \"deal-stage-categories\",\"id\": 2}}}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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": true,
        "duration": 20000,
        "color": "#ee66aa",
        "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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/deal-statuses");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"deal-statuses\",\"attributes\":{\"name\":\"Статус сделки в API\",\"color\":\"#000000\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/deal-statuses?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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":""
         },
         "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.syncrm.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\":\"\"},\"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.syncrm.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":""         
      },         
      "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":""         
      },         
      "relationships":{           
        "source":{             
          "data":{               
            "type":"sources",               
            "id":"2"             
            }           
          }         
        }       
      }     
    }`)
	req, err := http.NewRequest("POST", "https://app.syncrm.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.syncrm.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":""         
      },         
      "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.syncrm.ru/api/v1/orders"

payload = json.dumps({       
  "data":{         
    "type":"orders",         
    "attributes":{           
      "name":"Заявка по API",           
      "archived-at":""         
      },         
      "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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/orders");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"orders\",\"attributes\":{\"name\":\"Заявка по API\",\"archived-at\":\"2022-02-22\"},\"relationships\":{\"source\":{\"data\":{\"type\":\"sources\",\"id\":\"2\"}}}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

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

curl "https://app.syncrm.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":""
         },
         "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.syncrm.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\":\"\"},\"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.syncrm.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":""         
      },         
      "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":""         
      },         
      "relationships":{           
        "deals": {             
          "data" : [{               
            "type": "deals",               
            "id":22222             
            }]           
          }         
        }       
      }     
    }`)
	req, err := http.NewRequest("POST", "https://app.syncrm.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.syncrm.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":""         
      },         
      "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.syncrm.ru/api/v1/orders"

payload = json.dumps({       
  "data":{         
    "type":"orders",         
    "attributes":{           
      "name":"Заявка по API с предустановленной сделкой",           
      "archived-at":""         
      },         
      "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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/orders");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"orders\",\"attributes\":{\"name\":\"Заявка по API с предустановленной сделкой\",\"archived-at\":\"2022-02-22\"},\"relationships\":{\"deals\": {\"data\" : [{\"type\": \"deals\",\"id\": 22222}]}}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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"
      }
   }
}
Имя Тип Пример Запись Описание
name string Моя сделка да Имя заявки
description 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 да Дата архивации

Связи

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

{
  "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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/orders?include=source,responsible");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

Каждая связь может быть включена в 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 entity-products

Фильтры

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

curl -G "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/orders?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/order-loss-reasons");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"order-loss-reasons\",\"attributes\":{\"name\":\"Моя причина поражения\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/order-loss-reasons?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/order-stages");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"deal-stages\",\"attributes\":{\"name\":\"Этап в API\"},\"relation\"}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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 да Цвет этапа
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/deal-stages?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/order-statuses");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"order-statuses\",\"attributes\":{\"name\":\"Статус заявки в API\",\"color\":\"#000000\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/order-statuses?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/diary-events");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"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.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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":"Отправить копию договора",
        "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 Переговоры с ООО "Компания" да Название события
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 да Дата архивации

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

Связи

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

{
  "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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/diary-events?include=diary-type,responsible");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

Каждая связь может быть включена в 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

Фильтры

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

curl -G "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/diary-events?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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

Задачи

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

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/diary-tasks");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"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.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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":"Отправить копию договора",
        "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",
        "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 Отправить копию договора да Имя задачи
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 да Дата архивации

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

Связи

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

{
  "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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/diary-tasks?include=deal,contact");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

Каждая связь может быть включена в 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
Приоритет diary-priority diary-priorities

Фильтры

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

curl -G "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/diary-tasks?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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

Приоритеты

Создание приоритета задачи

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/diary-priorities");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"diary-priorities\",\"attributes\":{\"name\":\"Приоритет задачи в API\",\"color\":\"#000000\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/telephonies");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"telephonies\",\"attributes\":{\"provider\":\"mango\",\"mango-code\":\"1122\",\"mango-sign-key\":\"signkey\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/telephonies?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/telephony-phones");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"telephony-phones\",\"attributes\":{\"number\":\"+79876543211\"},\"relationships\":{\"telephony\":{\"data\":{\"type\":\"telephonies\",\"id\":\"2\"}},\"user\":{\"data\":{\"type\":\"users\",\"id\":\"2\"}}}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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":"2",
        "attributes":{
            "number":"+79876543211",
            "created-at":"2022-02-22T12:22:22.222+03:00",
            "updated-at":"2022-02-22T12:22:22.222+03:00"
        }
    }
}
Имя Тип Пример Запись Описание
number* string +79876543211 да Номер телефона
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03:00 нет Дата обновления

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

Связи номеров

Пример данных

{
    "data": {
        "type":"telephonies-phones",
        "id":"2",
        "relationships":{
            "telephony":{
                "links":{
                    "self":"/api/v1/telephonies-phone/2/relationships/telephony",
                    "related":"/api/v1/telephonies-phone/2/telephony"
                }
            },
            "user":{
                "links":{
                    "self":"/api/v1/telephonies-phone/2/relationships/user",
                    "related":"/api/v1/telephonies-phone/2/user"
                }
            }
        }
    }
}

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

Название Связь JSON API type
Телефония telephony telephonies
Сотрудник user users

Фильтры

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

curl -G "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/telephony-phones?filter[user]=2");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/telephony-calls");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"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.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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":{
          "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 да Тип звонка
duration double 2000.0 да Длительность звонка
answered-at datetime 2022-02-22T12:22:22.222+03:00 да Дата ответа
created-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-status

* Обязательная связь

Обязательные связи в зависимости от ключа

Ключ Обязательные связи Описание
outgoing src-phone Исходящий звонок
incoming dst-phone Входящий звонок
internal src-phone и dst-phone Внутренний звонок
planned dst-phone Плановый звонок
error src-phone или dst-phone Ошибка

Фильтры

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

curl -G "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/telephony-calls?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/telephony-statuses");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"telephony-statuses\",\"attributes\":{\"name\":\"Статус телефонии в API\",\"color\":\"#000000\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/telephony-statuses?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.ru/telephony_external/6693d051-1111-2222-3333-000000000000" \
-X POST \ -H "Content-Type: application/x-www-form-urlencoded" \
-d @- << EOF src_number=200&started_at=2022-02-22T12:22:22+03:00&answered_at=2022-02-22T12:22:22+03:00&completed_at=2022-02-22T12:22:22+03:00&direction=outgoing&dst_number=79876543211&duration=20&status=answered&call_id=123456789

Расчет поля signature был выполнен методом MD5 от строки: dst_phone79876543211src_phone200TOKEN В качестве ответа на запрос, ожидается получение 200 серверного статуса. При многократном (5 попыток) получении статуса отличного от 200, интеграция клиента в Synergy CRM переводится из активного, в неактивный режим и указывается причина. Signature поле заполняется только в случае, когда в настройках интеграции выставлен флаг "Проверка данных".

Уведомления о звонках из АТС в Synergy CRM

Для доставки информации о звонках в Synergy CRM необходимо на выданный URL (см 1 пункт) отправлять POST запросом следующие атрибуты звонка:

Атрибут Ключ Пример Запись
Номер звонящего* src_phone 200 -
Номер принимающего* dst_phone 79876543211 -
Направление* direction outgoing outgoing - исходящий;
incoming - входящий;
internal - внутренний;
planned - запланированный;
undefined - не определен
ID звонка* call_id MjUyNjE1MzM1NTozNji= Любая уникальная строка до 255 символов
Длительность duration 2000 Количество секунд
Время начала звонка started_at 2022-02-22T12:22:22.222+03:00 Формат iso8601
Время ответа на звонок answered_at 2022-02-22T12:22:22.222+03:00 Формат iso8601
Время завершения звонка completed_at 2022-02-22T12:22:22.222+03:00 Формат iso8601
Статус звонка status answered answered - отвечен;
busy - занято;
no_answer - нет ответа;
cancel - вызов сброшен;
undefined - не определен
Ссылка на аудиозапись record https://host/audio.mp3 -

* Обязательные поля Уточнение по обязательным полям, в зависимости от направления звонка

Обязательные поля в зависимотси от направления звонка

Направление Обязательные поля Описание
outgoing src_phone Исходящий звонок
incoming dst_phone Входящий звонок
internal src_phone && dst_phone Внутренний звонок
planned dst_phone Плановый звонок
error src_phone && dst_phone Ошибка

Сценарии доставки уведомлений

Сценарий доставки уведомлений может быть двух видов: 1. Отправка уведомлений по мере их инициализации на сервере телефонии.

Например, как только поступил входящий звонок, то формируется запрос в котором указаны: src_phone=79876543211, dst_phone=200 и started_at=2022-02-22T12:22:22.222+03:00, call_id=MasOIEqwe1aq

Далее, как только была поднята трубка, то отправляется ещё один запрос с дополненными атрибутами: src_phone=79876543211, dst_phone=200, started_at=2022-02-22T12:22:22.222+03:00, call_id=MasOIEqwe1aq, status=answered, answered_at=2022-02-22T12:22:22.222+03:00.

Далее, звонок был завершен, повторяем отправку с новой информацией: src_phone=79876543211, dst_phone=200, started_at=2022-02-22T12:22:22.222+03:00, call_id=MasOIEqwe1aq, status=answered, answered_at=2022-02-22T12:22:22.222+03:00, completed_at=2022-02-22T12:22:22.222+03:00, duration=2000, recording=https://host/audio.mp3.

Не забываем, что каждый запрос должен содержать рассчитанный хэш в поле signature (только если опция проверки данных включена в настройках интеграции).

  1. Отправка уведомлений (один звонок == одно уведомление).

По окончанию звонка или по таймауту сервер телефонии делает отправку истории звонков. В момент обработки уведомлений на стороне Synergy CRM происходит следующее:

Дополнение: Синхронный ответ с телом объекта, в ближайшее время будет заменен на ID звонка в очереди обработки звонков, узнать о статусе обработки можно будет воспользовавшись методами https://api.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/products");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"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.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

Пример установки обложки

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Patch, "https://app.syncrm.ru/api/v1/products/10");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"products\",\"id\":\"22\",\"relationships\":{\"cover\":{\"data\":{\"type\":\"documents\",\"id\":\"222\"}}}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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 10110 да Код
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 нет Дата обновления
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/products?include=status,category");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

Каждая связь может быть включена в 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

Фильтры

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

curl -G "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/products/?filter[contacts]=2");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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

Категории продуктов

Создание новой категории продуктов

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/product-categories");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"product-categories\",\"attributes\":{\"name\":\"Категория в API\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/product-categories?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/product-discounts");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"product-discounts\",\"attributes\":{\"name\":\"Скидка в API\",\"size\":20.0}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/product-discounts?include=contact-type");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

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

Название Связь JSON API type
Тип контакта contact-type contact-types

Фильтры

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

curl -G "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/product-discounts?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/product-statuses");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"product-statuses\",\"attributes\":{\"name\":\"Статус заявки в API\",\"color\":\"#000000\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/product-statuses?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/product-types");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"product-types\",\"attributes\":{\"name\":\"Тип продукта в API\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/product-types?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/product-units");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"product-units\",\"attributes\":{\"name\":\"Единица измерения в API\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/product-units?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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
              }
            }
          }
        }
     }
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.syncrm.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}}}}}");
		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.syncrm.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
              }
            }
          }
        }
     }'

req_options = {
  use_ssl: uri.scheme == "https"
}
res = Net::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
              }
            }
          }
        }
     }`)
	req, err := http.NewRequest("POST", "https://app.syncrm.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.syncrm.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
              }
            }
          }
        }
     }',

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

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.syncrm.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
              }
            }
          }
        }
     })

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

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

print(response.text)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/entity-products");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"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.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

Добавление нескольких спецификаций по связи с продуктами у сделки. Из указанных продуктов будут созданы соответветствующие спецификации

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/deal/2/relationships/products");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":[{\"type\":\"products\",\"id\":\"2\"},{\"type\":\"products\",\"id\":\"2\"}]}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

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

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Patch, "https://app.syncrm.ru/api/v1/entity-products/1/");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"entity-products\",\"attributes\":{\"quantity\":2}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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}

Получение списка возможно только в контексте какого-либо объекта, то есть с обязательно указанными фильтрами entity-id и entity-type.

Связи

Пример данных

{
  "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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/entity-products??filter[entity-id]=11&filter[entity-type]=deals&include=entity");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

Каждая связь может быть включена в 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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/entity-products/?filter[entity-id]=2&filter[entity-type]=deals");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/estate-properties");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\"{\"type\":\"estate-properties\",\"attributes\":{\"name\":\"Объект недвижимости по API\",\"description\":\"объект созданный при помощи API\",\"purchase-price\":20000.0},\"relationships\":{\"status\":{\"data\":{\"type\":\"estate-property-statuses\",\"id\":\"2\"}}}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

Пример установки обложки

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Patch, "https://app.syncrm.ru/api/v1/estate-properties/22");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"estate-properties\",\"id\":\"22\",\"relationships\":{\"cover\":{\"data\":{\"type\":\"documents\",\"id\":\"222\"}}}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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":null,
        "purchase-price": "20000.0",
        "map-url": "http://app.syncrm.ru",
        "railway": "Станция 1",
        "cadastral-num": "123123",
        "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",
        "customs": {
            "custom-11801": "Кастомное значение"
        }
      }
   }
}
Имя Тип Пример Запись Описание
address string Ленинский 15 Да Адрес
archived-at datetime 2022-02-22T12:02:22.222+03:00 Нет Помещено в архив
balcony string balcony Да Балкон
bargain string yes Да Торг
build-at integer 2005 Да Год постройки
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:2222222: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 Хорошая квартира... Да Описание
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 3 Да Этаж
gas string possible Да Газификация
gate string hyudralic_ramps Да Въезд
heating string central Да Отопление
highway-access string direct_access Да Транспортная доступность
highway-name string Шоссейное Да Шоссе
installments string no Да Рассрочка
kitchen-area decimal 30.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 58 Да Жилая площадь, м. кв.
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 Станция 1 Да Ж/д станция
ready-quarter string III Да Квартал сдачи дома
region string Московская область Да Регион
relief string flat Да Рельеф
renovation string good Да Ремонт
rent-deposit string two_month Да Залог для аренды
rent-period string long Да Срок аренды
room-number integer 12 Да Квартира
rooms-for-sell integer 2 Да Комнат продается
separate-rooms integer 2 Да Комнат раздельно
sewerage string central Да Канализация
storage-type string Напольное Да Тип хранения
subway-dist integer 2 Да Расстояние до метро, м.
subway-foot integer 5 Да До метро пешком, мин.
subway-name string Станция "тест" Да Метро
subway-transport integer 2 Да До метро на транспорте, мин.
toilet string Совмещенный Да Туалет
total-area decimal 55 Да Общая площадь, м. кв.
total-floors integer 5 Да Этажей в доме
total-room integer 3 Да Комнат всего
updated-at datetime 2022-02-22T12:02:22.222+03:00 нет Обновлено
warehouse-floor string Бетонный пол Да Покрытие полов
warehouse-type string Склад Да Тип складского помещения
window-view string Во двор Да Вид из окна

Справочник атрибутов объектов недвижимости

* Обязательные поля ** Обложка может быть установлена только из тех документов, которые уже связаны с продуктом и являются изображением.

Связи

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

{
  "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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/estate-properties?include=status");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

Каждая связь может быть включена в 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

Статусы

Создание статуса объекта недвижимости

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/estate-property-statuses");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"estate-property-statuses\",\"attributes\":{\"name\":\"Статус объекта недвижимости в API\",\"color\":\"#d2d2d2\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/estate-property-statuses?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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

Счета и платежи

Пример данных для создания счета с позициями. Обязательно необходимо указать плательщика 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 да Дата отгрузки
payment-order-date date 2022-02-22 да Дата п/п
payment-order-number string 123456 да Номер п/п
reason string л/с 22222 да Основание
status string not_paid да Статус
balance decimal 2222.0 нет Неоплаченный остаток по счету
available-without-signature boolean true да Отметка о том, имеет ли документ юридическую силу без подписи

Позиции

Допустимые поля для значений массива 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

Статусы счетов

Допустимые значения для атрибута status.

Статус Код
Частично оплачен partial
Частично оплачен с просрочкой partial_overdue
Просрочен overdue
Не оплачен not_paid
Полностью оплачен paid
Без позиций without_positions

Связи

Название Связь JSON API type
Плательщик* payer companies, contacts
Создатель user users
Сделка deal deals
Заявка order orders
Продукты products products
Позиции positions invoice-positions
Платежи payments invoice-payments
Банк. реквизиты account-bank-detail account-bank-details
Банк. реквизиты компании company-bank-detail company-bank-details

* Обязательная связь

Фильтры

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

curl -G "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/invoices/?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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
custom-number Вывести счета и платежи с указанным ручн.№ filter[custom-number]=N2

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

Создание банковских реквизитов

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/account-bank-details");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"account-bank-details\",\"attributes\":{\"name\":\"test\",\"kind\":\"calculated_invoice\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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,
          "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 да Основные реквизиты?
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/org-details");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"org-details\",\"attributes\":{\"short-name\":\"test\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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": 2000.0,
        "is-service": false,
        "code": "222",
        "unit": "шт",
        "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 20 да Скидка на товар
amount decimal 2000.0 да Сумма позиции
is-service boolean false да Товар (false) или услуга (true)
unit string 'шт' да Единица измерения
code code '222' да Код товара

Связи

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

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/invoices/2/relationships/positions");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Название Связь 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 да Статус платежа

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

Фильтры платежей

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

curl -G "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/invoice-payments?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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
custom-number Вывести платежи с указанным ручн.№ filter[custom-number]=N222

Статусы платежей

Название Код
Исходящий, ожидающий исполнения 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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/deal-stages");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

Добавить новый источник

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/sources");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"sources\",\"attributes\":{\"name\":\"Новый источник\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Справочник 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

Запросы к справочникам имеют следующий формат:

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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/areas");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"areas\",\"attributes\":{\"name\":\"Моя территория\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

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

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/areas");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"areas\",\"attributes\":{\"name\":\"Моя территория\"},\"relationships\":{\"users\":{\"data\":[{\"type\":\"users\",\"id\":\"2\"},{\"type\":\"users\",\"id\":\"2\"}]}}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/competitors");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"competitors\",\"attributes\":{\"name\":\"Конкурент по API\",\"description\":\"ООО \\\"Конкурент\\\"\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/custom-field-categories");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"custom-field-categories\",\"attributes\":{\"class-name\":\"Order\",\"name\":\"Категория полей по API\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

Атрибуты

Атрибуты категории дополнительного поля

{
  "data": {
    "id": "2",
    "type": "custom-field-categories",
    "links": {
      "self": "https://app.syncrm.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 Категория полей по API да Название
class-name* string TelephonyCall да Класс объекта

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

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

Аттрибут Варианты
class-name Company, Contact, Deal, Order, User, Product, TelephonyCall

Фильтры

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

curl -G "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/competitors?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/custom-fields");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"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.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

Атрибуты

Атрибуты дополнительного поля

{
  "data": {
    "id": "2",
    "type": "custom-fields",
    "links": {
      "self": "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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 => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.syncrm.ru/api/v1/custom-fields"

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

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

print(response.text)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/custom-fields");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("filter[resources]=deals");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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 22 нет Системный идентификатор узла дерева
name* string `Узел** да Текст узла
childs* object [{"name":"test", "childs":[]}] Дочерние узлы дерева  

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

Обноление своего поля с типом список и двумя пунктами

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/custom-fields");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"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.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

Создание своего поля с типом дерево. Каждому пункту будет присвоен

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/custom-fields");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"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.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

Обноление своего поля с типом дерево

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/custom-fields");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"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.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

Пункты списка своего поля типа "Дерево"

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

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/custom-field-options");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"custom-field-options\",\"attributes\":{\"name\":\"Пункт по API\"},\"relationships\":{\"custom-field\":{\"data\":{\"type\":\"custom-fields\",\"id\":\"2\"}}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

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

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/custom-field-options");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"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.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

Перенос пункта от одного родителя другому

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Patch, "https://app.syncrm.ru/api/v1/custom-field-options/2");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"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.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Имя Тип Пример Запись Описание
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/custom-field-options?include=parent");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

Каждая связь может быть включена в 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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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 => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.syncrm.ru/api/v1/custom-field-options"

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

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

print(response.text)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/custom-field-options");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("filter[custom-field-id]=2");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
custom-field-id Вывести поля по определенному идентификтору своего поля filter[custom-field-id]=deals

Источники

Создание нового источника

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/sources");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"sources\",\"attributes\":{\"name\":\"Источник по API\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/sources?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/work-positions");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"type\":\"work-positions\",\"attributes\":{\"name\":\"Менеджер\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/areas?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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 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.syncrm.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.syncrm.ru/api/v1/documents/2"
        },
        "relationships": {
            "company": {
                "links": {
                    "self": "http://app.syncrm.ru/api/v1/documents/2/relationships/company",
                    "related": "http://app.syncrm.ru/api/v1/documents/2/company"
                }
            },
            "contact": {
                "links": {
                    "self": "http://app.syncrm.ru/api/v1/documents/2/relationships/contact",
                    "related": "http://app.syncrm.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 "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Patch, "https://app.syncrm.ru/api/v1/profile");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"data\":{\"id\": 2,\"type\":\"users\",\"attributes\":{\"phone\":\"+79876543211\"}}}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
JSON API type users
URL /api/v1/profile
Чтение GET /api/v1/profile
Редактирование PATCH /api/v1/profile

Атрибуты

Атрибуты профиля

{
    "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",
            "email": "executive@example.ru",
            "first-name": "Иван",
            "last-name": "Иванов",
            "middle-name": "Иванович",
            "phone": "+79876543211",
            "position": "Chief Technology Officer",
            "avatar": "https://example.com/link/to/avatar.png"
        }
    }
}
Имя Тип Пример Запись Описание
first-name string Иван да Имя
last-name string Иванов да Фамилия
middle-name string Иванович да Отчество
phone string +79876543211 да Телефон
position string Chief Technology Officer да Должность
avatar string https://example.com/link/to/avatar.png нет Аватар пользователя
created-at datetime 2022-02-22T12:02:22.000+00:00 да Дата создания
updated-at datetime 2022-02-22T12:02:22.000+00:00 нет Дата обновления

Вебхуки

Раздел системы: Настройки -> Автоматизации -> Сценарии

С помощью вебхуков вы можете отправить информацию об объекте автоматизации на указанный адрес.

Объектом автоматизации может быть сделка, заявка, почтовое сообщение, компания или контакт.

Структура 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 - база данных с сопоставлением имен своих полей и сгенерированных имен системой

Сделки

JSON Сделки

{
  "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} Свои поля

Заявки

JSON Заявки

{
  "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} Свои поля

Компании

JSON Компании

{
  "type": "Company",
  "timestamp": 1519556956,
  "data": {
    "name": "ООО Синергия Софт",
    "general_phone": "+79876543211",
    "work_phone": "+79876543211",
    "other_phone": "+79876543211",
    "fax": "+79876543211",
    "email": "email@mail.ru",
    "other_email": "email@mail.com",
    "website": "synergycrm.ru",
    "description": "Разработка компьютерного программного обеспечения",
    "note": "Заметка по компании",
    "inn": "0101010101",
    "full_name": "Общество с ограниченной ответственностью Синергия Софт",
    "short_name": "ООО Синергия Софт",
    "ogrn": "0101010101010",
    "kpp": "010101010",
    "okved": "62.01",
    "manager_name": "Сидоров В.В.",
    "manager_position": "Генеральный директор",
    "lawfulness_base": null,
    "accountant": "Иванов И.И.",
    "country": "Россия",
    "address": "Университетская ул, д. 7, помещ. 503",
    "region": "Республика Татарстан",
    "city": "Иннополис",
    "street": "Университетская",
    "house": "1",
    "flat": null,
    "zip_code": "22222-0000",
    "juristic_country": "Россия",
    "juristic_region": "Республика Татарстан",
    "juristic_city": "Иннополис",
    "juristic_zip-code": "22222-0000",
    "juristic_street": "Университетская",
    "juristic_house": "1",
    "juristic_build": "1",
    "juristic_office": "1",
    "actual_country": "Россия",
    "actual_region": "Республика Татарстан",
    "actual_city": "Иннополис",
    "actual_zip-code": "22222-0000",
    "actual_street": "ул. Университетская",
    "actual_house": "22а",
    "actual_build": "2",
    "actual_office": "123",
    "mailing_country": "Россия",
    "mailing_region": "Республика Татарстан",
    "mailing_city": "Иннополис",
    "mailing_zip-code": "22222-0000",
    "mailing_street": "Университетская",
    "mailing_house": "1",
    "mailing_build": "1",
    "mailing_office": "1",
    "created_at": "22.02.2022 12:22:22",
    "updated_at": "22.02.2022 12:22:22",
    "user_id": 222,
    "user": "Имя пользователя",
    "responsible_id": null,
    "responsible": "",
    "source_id": 2,
    "source": "Вебсайт",
    "status_id": 2,
    "status": "Работает",
    "type_id": 2,
    "type": "Партнер",
    "custom_1": "Значение"
  },
  "custom_fields": {
    "custom_1": "Значение"
  }
}
Атрибут Описание
name Название
general_phone Осн. тел.
work_phone Раб. тел.
other_phone Доп. тел.
fax Факс
email E-mail
other_email Доп. e-mail
website Вебсайт
description Описание
note Заметка
inn ИНН
full_name Полн. наименование
short_name Сокр. наименование
ogrn ОГРН
kpp КПП
okved ОКВЭД
manager_name ФИО рук-ля
manager_position Должность рук-ля
lawfulness_base Правомочность
accountant Гл.бухгалтер
country Страна
address Адрес
region Регион
city Город
street Улица
house Дом
flat Офис/Квартира
zip_code Индекс
juristic_country Юр. страна
juristic_region Юр. регион
juristic_city Юр. город
juristic_zip_code Юр. индекс
juristic_street Юр. улица
juristic_house Юр. дом
juristic_build Юр. строение
juristic_office Юр. офис
actual_country Факт. страна
actual_region Факт. регион
actual_city Факт. город
actual_zip_code Факт. индекс
actual_street Факт. улица
actual_house Факт. дом
actual_build Факт. корпус
actual_office Факт. офис
mailing_country Почт. страна
mailing_region Почт. регион
mailing_city Почт. город
mailing_zip_code Почт. индекс
mailing_street Почт. улица
mailing_house Почт. дом
mailing_build Почт. строение
mailing_office Почт. офис
created_at Создано
updated_at Обновлено
user_id Создатель (ID)
user Создатель
responsible_id Ответственный (ID)
responsible Ответственный
source_id Источник (ID)
source Источник
status_id Статус (ID)
status Статус
type_id Тип (ID)
type Тип
custom_{id} Свои поля

Контакты

JSON Контакта

{
  "type": "Contact",
  "timestamp": 1519557678,
  "data": {
    "name": "Lastname Firstname Middlename",
    "position": "Chief Technology Officer",
    "first_name": "Иван",
    "last_name": "Иванов",
    "middle_name": "Иванович",
    "mobile_phone": "+79876543211",
    "general_phone": "+79876543211",
    "work_phone": "+79876543211",
    "other_phone": "+79876543211",
    "email": "mail@mail.ru",
    "other_email": "mail@mail.com",
    "description": "Описание контакта",
    "note": "Заметка по контакту",
    "fax": null,
    "website": "somesite.ru",
    "created_at": "22.12.2022 22:22:22",
    "updated_at": "22.12.2022 22:22:22",
    "work_country": "Россия",
    "work_region": "Республика Татарстан",
    "work_city": "Иннополис",
    "work_zipcode": "012345",
    "work_street": "ул. Университетская",
    "work_building": "2",
    "work_housing": "2",
    "work_apartment": "22",
    "home_country": "Россия",
    "home_region": "Республика Татарстан",
    "home_city": "Иннополис",
    "home_zipcode": "012345",
    "home_street": "ул. Университетская",
    "home_building": "2",
    "home_housing": "2",
    "home_apartment": "22",
    "vkontakte": "vk.com/domain",
    "facebook": "facebook.com/domain",
    "linkedin": "ru.linkedin.com/domain",
    "odnoklassniki": "ok.ru/domain",
    "instagram": "instagram.com/domain",
    "twitter": "twitter.com/domain",
    "whatsapp": "wa.me/79876543211",
    "viber": "viber://chat?number=+79876543211",
    "telegram": "t.me/username",
    "skype": "skype:(username)",
    "responsible_id": 2,
    "responsible": "",
    "user_id": 2,
    "user": "Имя пользователя",
    "status_id": 22,
    "status": "Сотрудник",
    "type_id": 22,
    "type": "Сотрудник",
    "source_id": null,
    "source": ""
  },
  "custom_fields": {}
}
Атрибут Описание
name ФИО
position Должность
first_name Имя
last_name Фамилия
middle_name Отчество
mobile_phone Моб. тел.
general_phone Осн. тел.
work_phone Раб. тел.
other_phone Доп. тел.
email E-mail
other_email Доп. e-mail
description Описание
note Заметка
fax Факс
website Вебсайт
created_at Создано
updated_at Изменено
work_country Раб. страна
work_region Раб. регион
work_city Раб. город
work_zipcode Раб. индекс
work_street Раб. улица
work_building Раб. дом
work_housing Раб. корпус
work_apartment Раб. офис
home_country Дом. страна
home_region Дом. регион
home_city Дом. город
home_zipcode Дом. индекс
home_street Дом. улица
home_building Дом. дом
home_housing Дом. корпус
home_apartment Дом. квартира
vkontakte VK
facebook Facebook
linkedin LinkedIn
odnoklassniki Одноклассники
instagram Instagram
twitter Twitter
whatsapp WhatsApp
viber Viber
telegram Telegram
skype Skype
responsible_id Ответственный (ID)
responsible Ответственный
user_id Создатель (ID)
user Создатель
status_id Status (ID)
status Статус
type_id Тип (ID)
type Тип
source_id Источник (ID)
source Источник

Почтовые сообщения

JSON Почтового сообщения

{
  "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 Создатель

UTM-метки

Создание UTM-метки

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Создание UTM-метки с привязанным контактом, заявкой и звонком

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/utm-labels");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"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.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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 Moscow да Город кампании
content string link да Идентификатор объявления
created-at datetime 2022-02-22T12:02:22.222+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 2022-02-22T12:02:22.222+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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/utm-labels?include=deals,contacts");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

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

Название Связь JSON API type
Компания company companies
Контакт contact contacts
Звонки telephony-calls telephony-calls
Заявки orders orders
Сделки deals deals

Фильтры

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

curl -G "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/utm-labels?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/activities");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("filter[trackable-type]=contacts");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
JSON API type activities
URL /api/v1/activities
Список GET /api/v1/activities
Чтение GET /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",
        "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":"Иван"} да Параметры активности (изменения/описание события)

Связи

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

{
    "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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/activities?include=user,trackable");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

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

Название Связь JSON API type
Объект активности trackable [companies](#companies), [contacts](#contacts), [deals](#deals), [entries](#entries), [orders](#orders), [diaries](#diary_tasks), [products](#products), [estate-properties](#estate_properties), [users](#profile), [invoices](#invoices), [invoice-payments](#invoice_payments)
Автор активности user users

Фильтры

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

curl -G "https://app.syncrm.ru/api/v1/activities" \
  -X GET \
  -H "Authorization: Bearer api_token" \
  --data-urlencode "filter[user_id]=222"

Пример на Java

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

class Main {

	public static void main(String[] args) throws IOException {
		URL url = new URL("https://app.syncrm.ru/api/v1/activities?filter[user_id]=222");
		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.syncrm.ru/api/v1/activities?filter[user_id]=222')
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.syncrm.ru/api/v1/activities?filter[user_id]=222", 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.syncrm.ru/api/v1/activities?filter[user_id]=222',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/vnd.api+json',
    'Authorization: Bearer api_token'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Пример на Python

import requests
import json

url = "https://app.syncrm.ru/api/v1/activities?filter[user_id]=222"

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

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

print(response.text)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/activities?filter[user_id]=222");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

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

curl -G "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/activities?filter[trackable_type]=companies&filter[trackable_id]=2222");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
trackable_type* Вывести активности по определённому типу ресурса filter[trackable_type]=contacts
trackable_id Вывести активности по идентификатору объекта filter[trackable_id]=2222
key** Вывести активности по определённому типу события filter[key]=create
user_id Вывести активности по определённому пользователю filter[user_id]=222

* Возможные значения: 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, message.

Трекинг рабочего времени пользователя

Создание рабочего времени

curl "https://app.syncrm.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+03:00",
           "finished-at":"2022-02-22T22:22:22+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.syncrm.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+03:00\",\"finished-at\":\"2022-02-22T22:22:22+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.syncrm.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+03:00",           "finished-at":"2022-02-22T22:22:22+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+03:00",           "finished-at":"2022-02-22T22:22:22+03:00"         
            }       
          }     
        }`)
	req, err := http.NewRequest("POST", "https://app.syncrm.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.syncrm.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+03:00",           "finished-at":"2022-02-22T22:22:22+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.syncrm.ru/api/v1/user-work-times"

payload = json.dumps({
         "data":{         
          "type":"user-work-times",         
          "attributes":{           
            "started-at":"2022-02-22T12:22:22+03:00",           "finished-at":"2022-02-22T22:22:22+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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/user-work-times");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"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.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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+03:00",
      "finished-at":"2022-02-22T22:22:22+03:00",
      "created-at":"2022-02-22T12:22:22+03:00",
      "updated-at":"2022-02-22T22:22:22+03:00"
    }
  }
}
Имя Тип Пример Запись Описание
started-at datetime 2022-02-22T12:02:22.222+03:00 да Провайдер телефонии
finished-at datetime 2022-02-22T22:02:22.222+03:00 да Дата окончания рабочего времени
created-at datetime 2022-02-22T12:02:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T22:02:22.222+03:00 нет Дата обновления

Фильтры

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

curl -G "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/user-work-times?filter[user-id]=2");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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

Склады

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

curl "https://app.syncrm.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.syncrm.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.syncrm.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.22 +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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://app.syncrm.ru/api/v1/stores");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("{\"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.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

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

{
  "data": {
      "type":"stores",
      "id":"2",
      "attributes":{
        "name": "Мой склад в Москве"
      }
   }
}

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

curl -G "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/stores?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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}

Атрибуты

Имя Тип Пример Запись Описание
name* string Мой склад в Москве да Название склада
created-at datetime 2022-02-22T12:22:22.222+03:00 да Дата создания
updated-at datetime 2022-02-22T12:22:22.222+03: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

Остатки

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

curl -G "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/stores/2/product-balances");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

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

curl -G "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/products/2/store-balances");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
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.syncrm.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.syncrm.ru/api/v1/product-by-stores/2/relationships/store",
                        "related": "https://app.syncrm.ru/api/v1/product-by-stores/2/store"
                    }
                },
                "product":
                {
                    "links":
                    {
                        "self": "https://app.syncrm.ru/api/v1/product-by-stores/2/relationships/product",
                        "related": "https://app.syncrm.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 является опциональной, если он не будет передан, то необходимо, чтобы были педераны атрибуты store-positions, такие как: name*, quantity, amount

Атрибуты позиции в складской операции

{
    "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":222
          }
        }
      }
    }
  }
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 400.0 нет Сумма скидки
amount decimal 2000.0 да Сумма позиции
amount-with-discount decimal 1600,0 нет Сумма позиции с учетом скидки
is-service boolean false нет Товар (false) или услуга (true)
unit string 'шт' нет Единица измерения
code string '222' нет Код товара

Связи

Загрузка позиций по определенной операции (id = 2)

curl "https://app.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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.syncrm.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)

Пример на C#

using System.Net.Http.Headers;

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/store-operations/2/relationships/store_positions");

request.Headers.Add("Authorization", "Bearer api_token");

request.Content = new StringContent("");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Название Связь JSON API type
Складская операция operation store-operations
Продукт product products

Фильтры

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

curl -G "https://app.syncrm.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.syncrm.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.syncrm.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{}
   var data = strings.NewReader(`filter[created-at-gte]=2022.02.22 12:00`)
	req, err := http.NewRequest("GET", "https://app.syncrm.ru/api/v1/store-positions", 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.syncrm.ru/api/v1/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.syncrm.ru/api/v1/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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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 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 22 да Порядковый номер
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 22222.0 нет Сумма
total-vat decimal 22 нет Сумма НДС
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 1 нет Предыдущий ответственный

Связи

Название Связь 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

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

{
  "data": {
    "id": "2",
    "type": "store-operations",
    "links": {
      "self": "https://app.syncrm.ru/api/v1/store-operations/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",
      "number": 2,
      "kind": "acceptance",
      "description": "Мое описание",
      "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": "completed",
      "amount": "0.0",
      "total-vat": "0.0",
      "executed-at": "2022-02-22T12:22:22.222+03:00",
      "canceled-at": null
    },
    "relationships": {
      "contractor": {
        "data": {
          "type": "companies",
          "id": "222"
        }
      },
      "org-detail": {
        "data": {
          "type": "org-details",
          "id": "2"
        }
      },
      "to-store": {
        "data": {
          "type": "stores",
          "id": "2"
        }
      }
    }
  }
}

Фильтры

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

curl -G "https://app.syncrm.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.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.syncrm.ru/api/v1/store-positions");
		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'
require 'uri'

uri = URI.parse("https://app.syncrm.ru/api/v1/store-positions")
request = Net::HTTP::Get.new(uri)
request["Authorization"] = "Bearer api_token"

req_options = {
  use_ssl: uri.scheme == "https",
}

response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(request)
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.syncrm.ru/api/v1/store-positions", 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.syncrm.ru/api/v1/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.syncrm.ru/api/v1/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)

Пример на C#

HttpClient client = new HttpClient();

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://app.syncrm.ru/api/v1/store-positions?filter[created-at-gte]=2022.02.22 12:00");

request.Headers.Add("Authorization", "Bearer api_token");

HttpResponseMessage response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Фильтр Описание Пример
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 Создание заказа поставщику

{
   "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"
            }
         }
      }
   }
}

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

JSON Создание приемки

{
   "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"
            }
         }
      }
   }
}

Создание оприходования

JSON Создание оприходования

{
   "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"
            }
         }
      }
   }
}

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

JSON Создание заказа покупателя

{
   "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":"2"
            }
         },
         "order":{
            "data":{
               "type":"orders",
               "id":"2"
            }
         }
      }
   }
}

Создание отгрузки

JSON Создание отгрузки

{
   "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"
            }
         }
      }
   }
}

Создание списания

JSON Создание списания

{
   "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"
            }
         }
      }
   }
}