sk_api_schema 0.10.6 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +6 -2
- data/CHANGELOG.md +4 -0
- data/README.rdoc +1 -1
- data/Rakefile +0 -10
- data/json/v1.0/account.json +13 -0
- data/json/v1.0/contact.json +7 -1
- data/json/v1.0/credit_note.json +6 -0
- data/json/v1.0/invoice.json +6 -0
- data/json/v1.0/order.json +6 -0
- data/json/v1.0/product.json +0 -4
- data/json/v1.0/recurring.json +6 -0
- data/json/v2.0/README.md +28 -0
- data/json/v2.0/account.json +31 -18
- data/json/v2.0/account_billing.json +15 -7
- data/json/v2.0/account_entry.json +19 -16
- data/json/v2.0/address.json +7 -6
- data/json/v2.0/attachment.json +17 -16
- data/json/v2.0/auth_permission.json +6 -5
- data/json/v2.0/comment.json +15 -9
- data/json/v2.0/company.json +11 -8
- data/json/v2.0/contact.json +45 -49
- data/json/v2.0/credit_note.json +59 -84
- data/json/v2.0/divider_item.json +9 -8
- data/json/v2.0/document.json +41 -36
- data/json/v2.0/email.json +29 -22
- data/json/v2.0/email_template.json +15 -10
- data/json/v2.0/estimate.json +59 -76
- data/json/v2.0/export.json +26 -16
- data/json/v2.0/export_template.json +15 -9
- data/json/v2.0/invoice.json +62 -92
- data/json/v2.0/language.json +14 -6
- data/json/v2.0/line_item.json +14 -13
- data/json/v2.0/order.json +59 -75
- data/json/v2.0/payment.json +17 -12
- data/json/v2.0/payment_reminder.json +53 -71
- data/json/v2.0/pdf_template.json +14 -8
- data/json/v2.0/product.json +16 -13
- data/json/v2.0/recurring.json +57 -54
- data/json/v2.0/sub.json +14 -7
- data/json/v2.0/sub_total_item.json +10 -9
- data/json/v2.0/tag.json +13 -5
- data/json/v2.0/task.json +31 -16
- data/json/v2.0/text_template.json +16 -10
- data/json/v2.0/user.json +8 -8
- data/lib/sk_api_schema/version.rb +1 -1
- data/sk_api_schema.gemspec +1 -1
- data/spec/sk_api_schema_spec.rb +35 -19
- data/spec/spec_helper.rb +1 -2
- metadata +7 -7
- data/json/v2.0/client.json +0 -318
data/json/v2.0/tag.json
CHANGED
@@ -1,25 +1,33 @@
|
|
1
|
-
{
|
1
|
+
{
|
2
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
3
|
+
"type":"object",
|
2
4
|
"title": "tag",
|
3
|
-
"name": "tag",
|
4
5
|
"description":"A tag",
|
5
6
|
"properties":{
|
6
7
|
"id":{
|
7
8
|
"description":"Unique identifier - UUID",
|
8
9
|
"identity":true,
|
9
|
-
"
|
10
|
+
"readOnly":true,
|
11
|
+
"type":"string",
|
12
|
+
"maxLength": 22,
|
13
|
+
"minLength":22
|
14
|
+
},
|
15
|
+
"company_id":{
|
16
|
+
"description":"Company",
|
17
|
+
"readOnly":true,
|
10
18
|
"type":"string",
|
11
19
|
"maxLength": 22,
|
12
20
|
"minLength":22
|
13
21
|
},
|
14
22
|
"name":{
|
15
23
|
"description": "The tag itself",
|
16
|
-
"
|
24
|
+
"readOnly":true,
|
17
25
|
"type":"string",
|
18
26
|
"maxLength": 50
|
19
27
|
},
|
20
28
|
"taggings_count":{
|
21
29
|
"description": "Usage count of this tag, for all objects in whole company scope.",
|
22
|
-
"
|
30
|
+
"readOnly":true,
|
23
31
|
"type":"number"
|
24
32
|
}
|
25
33
|
},
|
data/json/v2.0/task.json
CHANGED
@@ -1,24 +1,32 @@
|
|
1
|
-
{
|
1
|
+
{
|
2
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
3
|
+
"type":"object",
|
2
4
|
"title": "task",
|
3
|
-
"
|
4
|
-
"
|
5
|
+
"description":"An Task",
|
6
|
+
"required" : ["name", "description"],
|
5
7
|
"properties":{
|
6
8
|
"id":{
|
7
9
|
"description":"Unique identifier - UUID",
|
8
10
|
"identity":true,
|
9
|
-
"
|
11
|
+
"readOnly":true,
|
12
|
+
"type":"string",
|
13
|
+
"maxLength": 22,
|
14
|
+
"minLength":22
|
15
|
+
},
|
16
|
+
"company_id":{
|
17
|
+
"description":"Company",
|
18
|
+
"readOnly":true,
|
10
19
|
"type":"string",
|
11
20
|
"maxLength": 22,
|
12
21
|
"minLength":22
|
13
22
|
},
|
14
23
|
"name":{
|
15
24
|
"description": "The task title.",
|
16
|
-
"
|
17
|
-
"
|
25
|
+
"type":"string",
|
26
|
+
"maxLength": 255
|
18
27
|
},
|
19
28
|
"description":{
|
20
29
|
"description": "Notes, explanations for the task.",
|
21
|
-
"required":true,
|
22
30
|
"type":"string"
|
23
31
|
},
|
24
32
|
"status":{
|
@@ -35,20 +43,27 @@
|
|
35
43
|
},
|
36
44
|
"contact":{
|
37
45
|
"description": "The contact for the task. Use contact_id field to set a contact.",
|
38
|
-
"
|
46
|
+
"readOnly":true,
|
39
47
|
"type":"object",
|
40
|
-
"
|
48
|
+
"$ref":"./contact.json#"
|
41
49
|
},
|
42
50
|
"documents":{
|
43
|
-
"description": "A
|
51
|
+
"description": "A task can have many related documents.",
|
52
|
+
"readOnly":true,
|
44
53
|
"type":"array",
|
45
|
-
"
|
54
|
+
"items": {
|
55
|
+
"type": "object",
|
56
|
+
"$ref" : "./document.json#"
|
57
|
+
}
|
46
58
|
},
|
47
59
|
"attachments":{
|
48
60
|
"description": "Attached files, uploads.",
|
49
|
-
"
|
61
|
+
"readOnly":true,
|
50
62
|
"type":"array",
|
51
|
-
"
|
63
|
+
"items": {
|
64
|
+
"type": "object",
|
65
|
+
"$ref" : "./attachment.json#"
|
66
|
+
}
|
52
67
|
},
|
53
68
|
"assignee_id":{
|
54
69
|
"description": "User who should do the tasks.",
|
@@ -65,19 +80,19 @@
|
|
65
80
|
"closed_at":{
|
66
81
|
"description": "Date the task was completed.",
|
67
82
|
"format":"date",
|
68
|
-
"
|
83
|
+
"readOnly":true,
|
69
84
|
"type":"string"
|
70
85
|
},
|
71
86
|
"created_at":{
|
72
87
|
"description": "Date the object was created in SK. Never changes afterwards",
|
73
88
|
"format":"date-time",
|
74
|
-
"
|
89
|
+
"readOnly":true,
|
75
90
|
"type":"string"
|
76
91
|
},
|
77
92
|
"updated_at":{
|
78
93
|
"description": "Date the object was edited in SK.",
|
79
94
|
"format":"date-time",
|
80
|
-
"
|
95
|
+
"readOnly":true,
|
81
96
|
"type":"string"
|
82
97
|
}
|
83
98
|
},
|
@@ -1,44 +1,50 @@
|
|
1
|
-
{
|
1
|
+
{
|
2
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
3
|
+
"type":"object",
|
2
4
|
"title": "text_template",
|
3
|
-
"
|
4
|
-
"
|
5
|
+
"description":"A text snippet template to be used in documents and emails",
|
6
|
+
"required" : ["name", "text", "kind"],
|
5
7
|
"properties":{
|
6
8
|
"id":{
|
7
9
|
"description":"Unique identifier - UUID",
|
8
10
|
"identity":true,
|
9
|
-
"
|
11
|
+
"readOnly":true,
|
12
|
+
"type":"string",
|
13
|
+
"maxLength": 22,
|
14
|
+
"minLength":22
|
15
|
+
},
|
16
|
+
"company_id":{
|
17
|
+
"description":"Company",
|
18
|
+
"readOnly":true,
|
10
19
|
"type":"string",
|
11
20
|
"maxLength": 22,
|
12
21
|
"minLength":22
|
13
22
|
},
|
14
23
|
"name":{
|
15
24
|
"description": "A meaningful name.",
|
16
|
-
"required":true,
|
17
25
|
"type":"string",
|
18
26
|
"maxLength": 50
|
19
27
|
},
|
20
28
|
"text":{
|
21
29
|
"description": "Text which may contain placeholders, replaced when the template is used.",
|
22
|
-
"required":true,
|
23
30
|
"type":"string",
|
24
|
-
"format":"
|
31
|
+
"format":"string"
|
25
32
|
},
|
26
33
|
"kind":{
|
27
34
|
"description": "Kind of object the template can be used for. If empty the snippet can be used global. In this case watch not all placeholders are available: a client has different fields than an invoice.",
|
28
|
-
"required":true,
|
29
35
|
"enum": ["","invoice", "estimate", "credit_note", "payment_reminder", "order", "contact", "email"],
|
30
36
|
"type":"string"
|
31
37
|
},
|
32
38
|
"created_at":{
|
33
39
|
"description": "Date the object was created in SK. Never changes afterwards",
|
34
40
|
"format":"date-time",
|
35
|
-
"
|
41
|
+
"readOnly":true,
|
36
42
|
"type":"string"
|
37
43
|
},
|
38
44
|
"updated_at":{
|
39
45
|
"description": "Date the object was edited in SK.",
|
40
46
|
"format":"date-time",
|
41
|
-
"
|
47
|
+
"readOnly":true,
|
42
48
|
"type":"string"
|
43
49
|
},
|
44
50
|
"team_id":{
|
data/json/v2.0/user.json
CHANGED
@@ -1,12 +1,14 @@
|
|
1
|
-
{
|
1
|
+
{
|
2
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
3
|
+
"type":"object",
|
2
4
|
"title": "user",
|
3
|
-
"
|
4
|
-
"
|
5
|
+
"description": "A SalesKing user",
|
6
|
+
"required" : ["email", "language"],
|
5
7
|
"properties":{
|
6
8
|
"id":{
|
7
9
|
"description":"Unique identifier - UUID",
|
8
10
|
"identity":true,
|
9
|
-
"
|
11
|
+
"readOnly":true,
|
10
12
|
"type":"string",
|
11
13
|
"maxLength": 22,
|
12
14
|
"minLength":22
|
@@ -38,7 +40,6 @@
|
|
38
40
|
},
|
39
41
|
"language":{
|
40
42
|
"description": "The users language, reflected in the interface.",
|
41
|
-
"required":true,
|
42
43
|
"type":"string",
|
43
44
|
"maxLength": 10
|
44
45
|
},
|
@@ -48,7 +49,6 @@
|
|
48
49
|
},
|
49
50
|
"email":{
|
50
51
|
"description": "Email address of the user. Unique in SK",
|
51
|
-
"required":true,
|
52
52
|
"type":"string",
|
53
53
|
"maxLength": 100
|
54
54
|
},
|
@@ -84,13 +84,13 @@
|
|
84
84
|
"created_at":{
|
85
85
|
"description": "Date the record was created in SK. Never changes afterwards.",
|
86
86
|
"format":"date-time",
|
87
|
-
"
|
87
|
+
"readOnly":true,
|
88
88
|
"type":"string"
|
89
89
|
},
|
90
90
|
"updated_at":{
|
91
91
|
"description": "Last date when the record was edited.",
|
92
92
|
"format":"date-time",
|
93
|
-
"
|
93
|
+
"readOnly":true,
|
94
94
|
"type":"string"
|
95
95
|
}
|
96
96
|
},
|
data/sk_api_schema.gemspec
CHANGED
@@ -19,9 +19,9 @@ Besides ruby users can use a small lib with utility methods to load and test the
|
|
19
19
|
s.require_paths = ['lib']
|
20
20
|
|
21
21
|
s.add_runtime_dependency 'activesupport'
|
22
|
-
s.add_development_dependency 'rdoc'
|
23
22
|
s.add_development_dependency 'rspec'
|
24
23
|
s.add_development_dependency 'simplecov'
|
24
|
+
s.add_development_dependency 'json_schema_validator'
|
25
25
|
s.add_development_dependency 'rake', '>= 0.9.2'
|
26
26
|
|
27
27
|
end
|
data/spec/sk_api_schema_spec.rb
CHANGED
@@ -7,44 +7,51 @@ describe SK::Api::Schema do
|
|
7
7
|
SK::Api::Schema.registry_reset
|
8
8
|
end
|
9
9
|
|
10
|
-
it "
|
11
|
-
File.exists?(SK::Api::Schema.path).
|
10
|
+
it "provides schema path" do
|
11
|
+
expect(File.exists?(SK::Api::Schema.path)).to be true
|
12
12
|
end
|
13
13
|
|
14
|
-
it "
|
14
|
+
it "reads json schema file" do
|
15
15
|
schema = SK::Api::Schema.read(:invoice, 'v1.0')
|
16
|
-
schema[:title].
|
17
|
-
schema[:type].
|
18
|
-
schema['properties'].
|
19
|
-
schema['properties']['id']['identity'].
|
16
|
+
expect(schema[:title]).to eq 'invoice'
|
17
|
+
expect(schema[:type]).to eq 'object'
|
18
|
+
expect(schema['properties']).to be_a Hash
|
19
|
+
expect(schema['properties']['id']['identity']).to be true
|
20
20
|
end
|
21
21
|
|
22
|
-
it "
|
22
|
+
it "reads json schema file with simple version" do
|
23
23
|
schema = SK::Api::Schema.read(:invoice, '1.0')
|
24
|
-
schema[:title].
|
25
|
-
schema[:type].
|
26
|
-
schema['properties'].
|
27
|
-
schema['properties']['id']['identity'].
|
24
|
+
expect(schema[:title]).to eq 'invoice'
|
25
|
+
expect(schema[:type]).to eq 'object'
|
26
|
+
expect(schema['properties']).to be_a Hash
|
27
|
+
expect(schema['properties']['id']['identity']).to be true
|
28
28
|
end
|
29
29
|
|
30
|
-
it "
|
30
|
+
it "reads all json schemas" do
|
31
31
|
schemas = SK::Api::Schema.read_all('1.0')
|
32
32
|
|
33
33
|
file_path = File.join(File.dirname(__FILE__), '../json', 'v1.0', '*.json')
|
34
34
|
# just check file count
|
35
|
-
schemas.length.
|
35
|
+
expect(schemas.length).to eq Dir.glob( file_path ).length
|
36
|
+
end
|
37
|
+
|
38
|
+
it "reads v2 json schemas" do
|
39
|
+
schemas = SK::Api::Schema.read_all('2.0')
|
40
|
+
|
41
|
+
file_path = File.join(File.dirname(__FILE__), '../json', 'v2.0', '*.json')
|
42
|
+
expect(schemas.length).to eq Dir.glob( file_path ).length
|
36
43
|
end
|
37
44
|
|
38
45
|
it "should raise error if version folder does not exist" do
|
39
|
-
|
46
|
+
expect{
|
40
47
|
SK::Api::Schema.read(:invoice, 'v3.0')
|
41
|
-
}.
|
48
|
+
}.to raise_error(Errno::ENOENT)
|
42
49
|
end
|
43
50
|
|
44
51
|
it "should raise error if schema file does not exist" do
|
45
|
-
|
52
|
+
expect{
|
46
53
|
SK::Api::Schema.read(:nope, 'v1.0')
|
47
|
-
}.
|
54
|
+
}.to raise_error(Errno::ENOENT)
|
48
55
|
end
|
49
56
|
|
50
57
|
it "should add schema to registry" do
|
@@ -52,7 +59,6 @@ describe SK::Api::Schema do
|
|
52
59
|
File.should_not_receive(:open)
|
53
60
|
SK::Api::Schema.read(:credit_note, 'v1.0')
|
54
61
|
end
|
55
|
-
|
56
62
|
end
|
57
63
|
|
58
64
|
context 'object parsing' do
|
@@ -144,6 +150,16 @@ describe SK::Api::Schema do
|
|
144
150
|
end
|
145
151
|
|
146
152
|
end
|
153
|
+
|
154
|
+
context 'validate v2 schemata' do
|
155
|
+
it 'should validate all' do
|
156
|
+
schema_path = File.join(SK::Api::Schema.path, 'v2.0')
|
157
|
+
errors = JsonSchemaValidator.validate_schemas(schema_path)
|
158
|
+
errors.each do |name, error|
|
159
|
+
expect(error).to be_empty
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
147
163
|
end
|
148
164
|
|
149
165
|
################################################################################
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sk_api_schema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Georg Leciejewski
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-05-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: rspec
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: simplecov
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: json_schema_validator
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -128,13 +128,13 @@ files:
|
|
128
128
|
- json/v1.0/task.json
|
129
129
|
- json/v1.0/text_template.json
|
130
130
|
- json/v1.0/user.json
|
131
|
+
- json/v2.0/README.md
|
131
132
|
- json/v2.0/account.json
|
132
133
|
- json/v2.0/account_billing.json
|
133
134
|
- json/v2.0/account_entry.json
|
134
135
|
- json/v2.0/address.json
|
135
136
|
- json/v2.0/attachment.json
|
136
137
|
- json/v2.0/auth_permission.json
|
137
|
-
- json/v2.0/client.json
|
138
138
|
- json/v2.0/comment.json
|
139
139
|
- json/v2.0/company.json
|
140
140
|
- json/v2.0/contact.json
|
@@ -186,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
186
186
|
version: '0'
|
187
187
|
requirements: []
|
188
188
|
rubyforge_project:
|
189
|
-
rubygems_version: 2.
|
189
|
+
rubygems_version: 2.4.8
|
190
190
|
signing_key:
|
191
191
|
specification_version: 4
|
192
192
|
summary: SalesKing API - JSON Schema
|
data/json/v2.0/client.json
DELETED
@@ -1,318 +0,0 @@
|
|
1
|
-
{"type":"object",
|
2
|
-
"title": "client",
|
3
|
-
"name": "client",
|
4
|
-
"description": "A client as seen by SalesKing. This resource is DEPRECATED please use contacts instead with type-field set 'Client'",
|
5
|
-
"properties":{
|
6
|
-
"id":{
|
7
|
-
"description":"Unique identifier - UUID",
|
8
|
-
"identity":true,
|
9
|
-
"readonly":true,
|
10
|
-
"type":"string",
|
11
|
-
"maxLength": 22,
|
12
|
-
"minLength":22
|
13
|
-
},
|
14
|
-
"number":{
|
15
|
-
"description": "Unique number, auto-created by SK for new client without number.",
|
16
|
-
"type":"string",
|
17
|
-
"maxLength": 50
|
18
|
-
},
|
19
|
-
"organisation":{
|
20
|
-
"description": "Name of a company. This or lastname must be present",
|
21
|
-
"required" : true,
|
22
|
-
"type":"string",
|
23
|
-
"maxLength": 100
|
24
|
-
},
|
25
|
-
"last_name":{
|
26
|
-
"description": "Last name of a person. At least this or the organisation field must be filled for new records",
|
27
|
-
"type":"string",
|
28
|
-
"maxLength": 50
|
29
|
-
},
|
30
|
-
"first_name":{
|
31
|
-
"description": "First name of a person.",
|
32
|
-
"type":"string",
|
33
|
-
"maxLength": 50
|
34
|
-
},
|
35
|
-
"gender":{
|
36
|
-
"description": "Can be empty for a company. Is used in salutation",
|
37
|
-
"enum":["male", "female"],
|
38
|
-
"type":"string"
|
39
|
-
},
|
40
|
-
"notes":{
|
41
|
-
"description": "Notes for a contact. For day to day information you should use comments instead.",
|
42
|
-
"type":"string",
|
43
|
-
"format": "text"
|
44
|
-
},
|
45
|
-
"position":{
|
46
|
-
"description": "Position of a person in a company.",
|
47
|
-
"type":"string",
|
48
|
-
"maxLength": 50
|
49
|
-
},
|
50
|
-
"title":{
|
51
|
-
"description": "Academical title of a person e.g. Dr., Prof",
|
52
|
-
"type":"string",
|
53
|
-
"maxLength": 50
|
54
|
-
},
|
55
|
-
"tax_number":{
|
56
|
-
"description": "Tax number, normally applies to a private person",
|
57
|
-
"type":"string",
|
58
|
-
"maxLength": 30
|
59
|
-
},
|
60
|
-
"vat_number":{
|
61
|
-
"description": "VAT number, for a company or person paying value added taxes.",
|
62
|
-
"type":"string",
|
63
|
-
"maxLength": 30
|
64
|
-
},
|
65
|
-
"email":{
|
66
|
-
"description": "Email address of the contact.",
|
67
|
-
"type":"string",
|
68
|
-
"maxLength": 100
|
69
|
-
},
|
70
|
-
"url":{
|
71
|
-
"description": "An url associated with the person, e.g its company website.",
|
72
|
-
"type":"string",
|
73
|
-
"maxLength": 255
|
74
|
-
},
|
75
|
-
"birthday":{
|
76
|
-
"description": "The birthday. YYYY-MM-DD",
|
77
|
-
"format":"date",
|
78
|
-
"type":"string"
|
79
|
-
},
|
80
|
-
"tag_list":{
|
81
|
-
"description": "Space separated list of tags. Are split and saved as Tag objects on create, update.",
|
82
|
-
"type":"string"
|
83
|
-
},
|
84
|
-
"created_at":{
|
85
|
-
"description": "Date the record was created in SK. Never changes afterwards.",
|
86
|
-
"format":"date-time",
|
87
|
-
"readonly":true,
|
88
|
-
"type":"string"
|
89
|
-
},
|
90
|
-
"updated_at":{
|
91
|
-
"description": "Last date when the record was edited.",
|
92
|
-
"format":"date-time",
|
93
|
-
"readonly":true,
|
94
|
-
"type":"string"
|
95
|
-
},
|
96
|
-
"language":{
|
97
|
-
"description": "Should be a valid language short-code: de-DE, fr, en-GB; like defined in your account language menu. When the client is emailed, a localized version of a multi-language template(email, pdf) will be used if available. The language will also be set for new documents.",
|
98
|
-
"type":"string",
|
99
|
-
"maxLength": 10
|
100
|
-
},
|
101
|
-
"currency":{
|
102
|
-
"description": "Currency code as defined by the ISO 4217 standard(3-letter UPCASE: EUR, USD). If set the currency is taken for new documents.",
|
103
|
-
"type":"string",
|
104
|
-
"maxLength": 3,
|
105
|
-
"minLength": 3
|
106
|
-
},
|
107
|
-
"payment_method":{
|
108
|
-
"description": "Default payment method for used for new documemts",
|
109
|
-
"enum":["cash","bank_transfer","credit_card","paypal","direct_debit","cheque", "moneybookers", "premium_sms"],
|
110
|
-
"type":"string"
|
111
|
-
},
|
112
|
-
"bank_name":{
|
113
|
-
"description": "Bank name",
|
114
|
-
"type":"string",
|
115
|
-
"maxLength": 70
|
116
|
-
},
|
117
|
-
"bank_number":{
|
118
|
-
"description": "Bank number",
|
119
|
-
"type":"string",
|
120
|
-
"maxLength": 35
|
121
|
-
},
|
122
|
-
"bank_account_number":{
|
123
|
-
"description": "Bank account number.",
|
124
|
-
"type":"string",
|
125
|
-
"maxLength": 35
|
126
|
-
},
|
127
|
-
"bank_iban":{
|
128
|
-
"description": "IBAN Number of the bank account. Is validated",
|
129
|
-
"type":"string",
|
130
|
-
"maxLength": 35
|
131
|
-
},
|
132
|
-
"bank_swift":{
|
133
|
-
"description": "SWIFT BIC- Bank Identifier Code",
|
134
|
-
"type":"string",
|
135
|
-
"maxLength": 11
|
136
|
-
},
|
137
|
-
"bank_owner":{
|
138
|
-
"description": "Bank account owner",
|
139
|
-
"type":"string",
|
140
|
-
"maxLength": 70
|
141
|
-
},
|
142
|
-
"phone_fax":{
|
143
|
-
"description": "Fax number",
|
144
|
-
"type":"string",
|
145
|
-
"maxLength": 30
|
146
|
-
},
|
147
|
-
"phone_office":{
|
148
|
-
"description": "Office phone number",
|
149
|
-
"type":"string",
|
150
|
-
"maxLength": 30
|
151
|
-
},
|
152
|
-
"phone_home":{
|
153
|
-
"description": "Private phone number",
|
154
|
-
"type":"string",
|
155
|
-
"maxLength": 30
|
156
|
-
},
|
157
|
-
"phone_mobile":{
|
158
|
-
"description": "Mobile phone number",
|
159
|
-
"type":"string",
|
160
|
-
"maxLength": 30
|
161
|
-
},
|
162
|
-
"lock_version":{
|
163
|
-
"description": "Increased on every edit, so SK can detect/prevent a concurrent edit by another user. First save wins.",
|
164
|
-
"type":"integer"
|
165
|
-
},
|
166
|
-
"cash_discount":{
|
167
|
-
"description": "Default cash discount for new invoices.",
|
168
|
-
"type":"number"
|
169
|
-
},
|
170
|
-
"due_days":{
|
171
|
-
"description": "Default due days for new invoices.",
|
172
|
-
"type":"integer"
|
173
|
-
},
|
174
|
-
"address_field":{
|
175
|
-
"description": "Returns the address field used on new docs. Consist of Organisation name and default(first) address",
|
176
|
-
"readonly":true,
|
177
|
-
"type":"string"
|
178
|
-
},
|
179
|
-
"addresses":{
|
180
|
-
"description": "A client can have many addresses, sorted by date descending(new first). Default address is the most recent one.",
|
181
|
-
"type":"array",
|
182
|
-
"properties" : {"$ref":"./address.json#properties"}
|
183
|
-
},
|
184
|
-
"team_id":{
|
185
|
-
"description": "A team uuid. If set only the team and its parent teams can see the record.",
|
186
|
-
"type":"string",
|
187
|
-
"maxLength": 22,
|
188
|
-
"minLength":22
|
189
|
-
}
|
190
|
-
},
|
191
|
-
"links":[
|
192
|
-
{ "rel": "self",
|
193
|
-
"href": "clients/{id}"
|
194
|
-
},
|
195
|
-
{ "rel": "instances",
|
196
|
-
"href": "clients",
|
197
|
-
"properties" : {
|
198
|
-
"page":{
|
199
|
-
"title" : "Page",
|
200
|
-
"description": "In paginated results set the page to look for",
|
201
|
-
"type":"number"
|
202
|
-
},
|
203
|
-
"per_page":{
|
204
|
-
"title" : "Per page",
|
205
|
-
"description": "Results per page. Default is 50, max is 200",
|
206
|
-
"type":"number"
|
207
|
-
},
|
208
|
-
"filter[q]":{
|
209
|
-
"title" : "Search",
|
210
|
-
"description": "Wildcard search in first, last_name, organisation, email, number",
|
211
|
-
"type":"string"
|
212
|
-
},
|
213
|
-
"filter[tags]":{
|
214
|
-
"title" : "Tags",
|
215
|
-
"description": "Filter by a space delimited list of tags",
|
216
|
-
"type":"string"
|
217
|
-
},
|
218
|
-
"filter[ids]":{
|
219
|
-
"title" : "Clients",
|
220
|
-
"description": "A single or a list of client uuids, comma separated",
|
221
|
-
"type" : "string"
|
222
|
-
},
|
223
|
-
"filter[created_at_from]":{
|
224
|
-
"title" : "From date",
|
225
|
-
"description": "Objects with a creation on/after the date(>=). ISO 8601 format YYY-MM-DDThh:mm:ss+z or just a date YYY-MM-DD. If date is given the time is set to the start of the day(00:00:00) so all objects created on this day are included. A time should be already utc time",
|
226
|
-
"format" : "date-time",
|
227
|
-
"type" : "string"
|
228
|
-
},
|
229
|
-
"filter[created_at_to]":{
|
230
|
-
"title" : "To date",
|
231
|
-
"description": "Objects with a creation until the date(<=). ISO 8601 format YYY-MM-DDThh:mm:ss+z or just a date YYY-MM-DD. If date is given the time is set to the end of the day(23:59:59) so all objects created on that day are included. A time should be already utc time.",
|
232
|
-
"format" : "date-time",
|
233
|
-
"type" : "string"
|
234
|
-
},
|
235
|
-
"filter[birthday_from]":{
|
236
|
-
"title" : "From birthday date",
|
237
|
-
"description": "Contacts with a birthday after and on the date. Leave the birthday-to date blank to only search on this day. YYYY-MM-DD",
|
238
|
-
"format" : "date",
|
239
|
-
"type" : "string"
|
240
|
-
},
|
241
|
-
"filter[birthday_to]":{
|
242
|
-
"title" : "To birthday date",
|
243
|
-
"description": "Contacts with a birthday date before and on the date. YYYY-MM-DD",
|
244
|
-
"format" : "date",
|
245
|
-
"type" : "string"
|
246
|
-
},
|
247
|
-
"filter[creator_ids]":{
|
248
|
-
"title" : "Creator",
|
249
|
-
"description": "Objects created by the given users uuids, comma separated",
|
250
|
-
"type" : "string"
|
251
|
-
},
|
252
|
-
"filter[number]":{
|
253
|
-
"title" : "By number",
|
254
|
-
"description": "Search by number where the number is matched from the start: number%",
|
255
|
-
"type" : "string"
|
256
|
-
},
|
257
|
-
"filter[languages]":{
|
258
|
-
"title" : "Languages",
|
259
|
-
"description": "A single or a list of language codes, comma separated",
|
260
|
-
"type" : "string"
|
261
|
-
},
|
262
|
-
"sort_by":{
|
263
|
-
"title" : "Sort by",
|
264
|
-
"description": "Sort the results by the given field => number",
|
265
|
-
"enum":["organisation", "number","email","first_name","last_name", "created_at", "updated_at"],
|
266
|
-
"type": "string"
|
267
|
-
},
|
268
|
-
"sort":{
|
269
|
-
"title" : "Sort",
|
270
|
-
"enum":["ASC","DESC"],
|
271
|
-
"description": "Sort the results in ASC or DESC"
|
272
|
-
}
|
273
|
-
}
|
274
|
-
},
|
275
|
-
{ "rel": "destroy",
|
276
|
-
"href": "clients/{id}",
|
277
|
-
"method": "DELETE"
|
278
|
-
},
|
279
|
-
{ "rel": "update",
|
280
|
-
"href": "clients/{id}",
|
281
|
-
"method": "PUT"
|
282
|
-
},
|
283
|
-
{ "rel": "create",
|
284
|
-
"href": "clients",
|
285
|
-
"method": "POST"
|
286
|
-
},
|
287
|
-
{ "rel": "documents",
|
288
|
-
"href": "clients/{id}/documents"
|
289
|
-
},
|
290
|
-
{ "rel": "attachments",
|
291
|
-
"href": "clients/{id}/attachments"
|
292
|
-
},
|
293
|
-
{ "rel": "invoices",
|
294
|
-
"href": "clients/{id}/invoices"
|
295
|
-
},
|
296
|
-
{ "rel": "estimates",
|
297
|
-
"href": "clients/{id}/estimates"
|
298
|
-
},
|
299
|
-
{ "rel": "orders",
|
300
|
-
"href": "clients/{id}/orders"
|
301
|
-
},
|
302
|
-
{ "rel": "credit_notes",
|
303
|
-
"href": "clients/{id}/credit_notes"
|
304
|
-
},
|
305
|
-
{ "rel": "recurrings",
|
306
|
-
"href": "clients/{id}/recurrings"
|
307
|
-
},
|
308
|
-
{ "rel": "payment_reminders",
|
309
|
-
"href": "clients/{id}/payment_reminders"
|
310
|
-
},
|
311
|
-
{ "rel": "comments",
|
312
|
-
"href": "clients/{id}/comments"
|
313
|
-
},
|
314
|
-
{ "rel": "emails",
|
315
|
-
"href": "clients/{id}/emails"
|
316
|
-
}
|
317
|
-
]
|
318
|
-
}
|