Введение
Спасибо за выбор 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 |
да | Факс |
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 | да | ВКонтакте |
string |
facebook.com/domain | да | ||
string |
ru.linkedin.com/domain | да | Linked-in | |
odnoklassniki | string |
ok.ru/domain | да | Одноклассники |
string |
instagram.com/domain | да | ||
string |
twitter.com/domain | да | ||
string |
wa.me/79876543211 | да | ||
viber | string |
viber://chat?number=+79876543211 | да | Viber |
telegram | string |
t.me/username | да | Telegram |
skype | string |
skype:(username) | да | Skype |
Связи
Пример данных (перечислены не все связи)
{
"data": {
"type":"contacts",
"id":"2",
"relationships":{
"responsible":{
"links":{
"self":"/api/v1/contacts/2/relationships/responsible",
"related":"/api/v1/contacts/2/responsible"
}
},
"contact-type":{
"links":{
"self":"/api/v1/contacts/2/relationships/contact-type",
"related":"/api/v1/contacts/2/contact-type"
}
}
}
}
}
Пример запроса с загруженными отвественными и типом контакта
curl "https://app.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 |
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 |
да | Факс |
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 |
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
(только если опция проверки данных включена в настройках интеграции).
- Отправка уведомлений (один звонок == одно уведомление).
По окончанию звонка или по таймауту сервер телефонии делает отправку истории звонков. В момент обработки уведомлений на стороне Synergy CRM происходит следующее:
- Принимается
POST
запрос, инициализируются обработчики интеграции клиента - Проверяется валидность и значение поля
signature
- Создается звонок
- Если звонок входящий, то пользователям, находящимся в онлайне, отображается тостер (окно в нижнем правом углу) в котором перечислены ссылки на компании и контакты, которые имеют этот же самый номер, что и в звонке. Далее, если пользователь нажмет на гиперссылку, то откроется миникарточка объекта.
- Формируется ответ SynergyCRM в ответ на
POST
запрос отвечает200
серверным статусом, а так же в теле ответа содержится json с информацией по созданному объекту звонка.
Дополнение: Синхронный ответ с телом объекта, в ближайшее время будет заменен на 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 | Факс |
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 | Доп. тел. |
other_email | Доп. e-mail |
description | Описание |
note | Заметка |
fax | Факс |
website | Вебсайт |
created_at | Создано |
updated_at | Изменено |
work_country | Раб. страна |
work_region | Раб. регион |
work_city | Раб. город |
work_zipcode | Раб. индекс |
work_street | Раб. улица |
work_building | Раб. дом |
work_housing | Раб. корпус |
work_apartment | Раб. офис |
home_country | Дом. страна |
home_region | Дом. регион |
home_city | Дом. город |
home_zipcode | Дом. индекс |
home_street | Дом. улица |
home_building | Дом. дом |
home_housing | Дом. корпус |
home_apartment | Дом. квартира |
vkontakte | VK |
odnoklassniki | Одноклассники |
viber | Viber |
telegram | Telegram |
skype | Skype |
responsible_id | Ответственный (ID) |
responsible | Ответственный |
user_id | Создатель (ID) |
user | Создатель |
status_id | Status (ID) |
status | Статус |
type_id | Тип (ID) |
type | Тип |
source_id | Источник (ID) |
source | Источник |
Почтовые сообщения
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"
}
}
}
}
}