-
Notifications
You must be signed in to change notification settings - Fork 187
/
exported-schema.json
1761 lines (1761 loc) · 71.4 KB
/
exported-schema.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
{
"version": "16.1.0",
"schemas": {
"AppSchema": {
"id": "/AppSchema",
"description": "Represents a full app.",
"type": "object",
"required": ["version", "platformVersion"],
"properties": {
"version": {
"description": "A version identifier for your code.",
"$ref": "/VersionSchema"
},
"platformVersion": {
"description": "A version identifier for the Zapier execution environment.",
"$ref": "/VersionSchema"
},
"beforeApp": {
"description": "EXPERIMENTAL: Before the perform method is called on your app, you can modify the execution context.",
"$ref": "/MiddlewaresSchema"
},
"afterApp": {
"description": "EXPERIMENTAL: After the perform method is called on your app, you can modify the response.",
"$ref": "/MiddlewaresSchema"
},
"authentication": {
"description": "Choose what scheme your API uses for authentication.",
"$ref": "/AuthenticationSchema"
},
"requestTemplate": {
"description": "Define a request mixin, great for setting custom headers, content-types, etc.",
"$ref": "/RequestSchema"
},
"beforeRequest": {
"description": "Before an HTTP request is sent via our `z.request()` client, you can modify it.",
"$ref": "/MiddlewaresSchema"
},
"afterResponse": {
"description": "After an HTTP response is recieved via our `z.request()` client, you can modify it.",
"$ref": "/MiddlewaresSchema"
},
"hydrators": {
"description": "An optional bank of named functions that you can use in `z.hydrate('someName')` to lazily load data.",
"$ref": "/HydratorsSchema"
},
"resources": {
"description": "All the resources for your app. Zapier will take these and generate the relevent triggers/searches/creates automatically.",
"$ref": "/ResourcesSchema"
},
"triggers": {
"description": "All the triggers for your app. You can add your own here, or Zapier will automatically register any from the list/hook methods on your resources.",
"$ref": "/TriggersSchema"
},
"bulkReads": {
"description": "All of the read bulks (GETs) your app exposes to retrieve resources in batches.",
"$ref": "/BulkReadsSchema"
},
"searches": {
"description": "All the searches for your app. You can add your own here, or Zapier will automatically register any from the search method on your resources.",
"$ref": "/SearchesSchema"
},
"creates": {
"description": "All the creates for your app. You can add your own here, or Zapier will automatically register any from the create method on your resources.",
"$ref": "/CreatesSchema"
},
"searchOrCreates": {
"description": "All the search-or-create combos for your app. You can create your own here, or Zapier will automatically register any from resources that define a search, a create, and a get (or define a searchOrCreate directly). Register non-resource search-or-creates here as well.",
"$ref": "/SearchOrCreatesSchema"
},
"searchAndCreates": {
"description": "An alias for \"searchOrCreates\".",
"$ref": "/SearchAndCreatesSchema"
},
"flags": {
"description": "Top-level app options",
"$ref": "/AppFlagsSchema"
},
"throttle": {
"description": "Zapier uses this configuration to apply throttling when the limit for the window is exceeded. When set here, it is the default throttle configuration used on each action of the integration. And when set in an action's operation object, it gets overwritten for that action only.",
"$ref": "/ThrottleObjectSchema"
},
"legacy": {
"description": "**INTERNAL USE ONLY**. Zapier uses this to hold properties from a legacy Web Builder app.",
"type": "object",
"docAnnotation": {
"hide": true
}
},
"firehoseWebhooks": {
"description": "**INTERNAL USE ONLY**. Zapier uses this for internal webhook app configurations.",
"type": "object",
"docAnnotation": {
"hide": true
}
}
},
"additionalProperties": false
},
"FieldChoiceWithLabelSchema": {
"id": "/FieldChoiceWithLabelSchema",
"description": "An object describing a labeled choice in a static dropdown. Useful if the value a user picks isn't exactly what the zap uses. For instance, when they click on a nickname, but the zap uses the user's full name ([image](https://cdn.zapier.com/storage/photos/8ed01ac5df3a511ce93ed2dc43c7fbbc.png)).",
"type": "object",
"required": ["value", "sample", "label"],
"properties": {
"value": {
"description": "The actual value that is sent into the Zap. This is displayed as light grey text in the editor. Should match sample exactly.",
"type": "string",
"minLength": 1
},
"sample": {
"description": "A legacy field that is no longer used by the editor, but it is still required for now and should match the value.",
"type": "string",
"minLength": 1
},
"label": {
"description": "A human readable label for this value.",
"type": "string",
"minLength": 1
}
}
},
"RefResourceSchema": {
"id": "/RefResourceSchema",
"description": "Reference a resource by key and the data it returns. In the format of: `{resource_key}.{foreign_key}(.{human_label_key})`.",
"type": "string",
"pattern": "^[a-zA-Z0-9_]+\\.[a-zA-Z0-9_\\s\\[\\]]+(\\.[a-zA-Z0-9_\\s\\[\\]]+(,[a-zA-Z0-9_\\s\\[\\]]+)*)?$"
},
"FieldChoicesSchema": {
"id": "/FieldChoicesSchema",
"description": "A static dropdown of options. Which you use depends on your order and label requirements:\n\nNeed a Label? | Does Order Matter? | Type to Use\n---|---|---\nYes | No | Object of value -> label\nNo | Yes | Array of Strings\nYes | Yes | Array of [FieldChoiceWithLabel](#fieldchoicewithlabelschema)",
"oneOf": [
{
"type": "object",
"minProperties": 1
},
{
"type": "array",
"minItems": 1,
"items": {
"oneOf": [
{
"type": "string"
},
{
"$ref": "/FieldChoiceWithLabelSchema"
}
]
}
}
]
},
"FieldMetaSchema": {
"id": "/FieldMetaSchema",
"type": "object",
"description": "Allows for additional metadata to be stored on the field.",
"patternProperties": {
"[^\\s]+": {
"description": "Only string, integer or boolean values are allowed.",
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "boolean"
}
]
}
}
},
"FieldSchema": {
"id": "/FieldSchema",
"description": "Defines a field an app either needs as input, or gives as output. In addition to the requirements below, the following keys are mutually exclusive:\n\n* `children` & `list`\n* `children` & `dict`\n* `children` & `type`\n* `children` & `placeholder`\n* `children` & `helpText`\n* `children` & `default`\n* `dict` & `list`\n* `dynamic` & `dict`\n* `dynamic` & `choices`",
"type": "object",
"required": ["key"],
"properties": {
"key": {
"description": "A unique machine readable key for this value (IE: \"fname\").",
"type": "string",
"minLength": 1
},
"label": {
"description": "A human readable label for this value (IE: \"First Name\").",
"type": "string",
"minLength": 1
},
"helpText": {
"description": "A human readable description of this value (IE: \"The first part of a full name.\"). You can use Markdown.",
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"type": {
"description": "The type of this value. Use `string` for basic text input, `text` for a large, `<textarea>` style box, and `code` for a `<textarea>` with a fixed-width font. Field type of `file` will accept either a file object or a string. If a URL is provided in the string, Zapier will automatically make a GET for that file. Otherwise, a .txt file will be generated.",
"type": "string",
"enum": [
"string",
"text",
"integer",
"number",
"boolean",
"datetime",
"file",
"password",
"copy",
"code"
]
},
"required": {
"description": "If this value is required or not.",
"type": "boolean"
},
"placeholder": {
"description": "An example value that is not saved.",
"type": "string",
"minLength": 1
},
"default": {
"description": "A default value that is saved the first time a Zap is created.",
"type": "string",
"minLength": 1
},
"primary": {
"description": "Use this field as part of the primary key for deduplication. You can set multiple fields as \"primary\", provided they are unique together. If no fields are set, Zapier will default to using the `id` field. `primary` only makes sense for `outputFields`; it will be ignored if set in `inputFields`. It only works in static `outputFields`; will not work in custom/dynamic `outputFields`. For more information, see [How deduplication works in Zapier](https://platform.zapier.com/build/deduplication).",
"type": "boolean"
},
"dynamic": {
"description": "A reference to a trigger that will power a dynamic dropdown.",
"$ref": "/RefResourceSchema"
},
"search": {
"description": "A reference to a search that will guide the user to add a search step to populate this field when creating a Zap.",
"$ref": "/RefResourceSchema"
},
"choices": {
"description": "An object of machine keys and human values to populate a static dropdown.",
"$ref": "/FieldChoicesSchema"
},
"list": {
"description": "Acts differently when used in inputFields vs. when used in outputFields. In inputFields: Can a user provide multiples of this field? In outputFields: Does this field return an array of items of type `type`?",
"type": "boolean"
},
"children": {
"type": "array",
"items": {
"$ref": "/FieldSchema"
},
"description": "An array of child fields that define the structure of a sub-object for this field. Usually used for line items.",
"minItems": 1
},
"dict": {
"description": "Is this field a key/value input?",
"type": "boolean"
},
"computed": {
"description": "Is this field automatically populated (and hidden from the user)? Note: Only OAuth and Session Auth support fields with this key.",
"type": "boolean"
},
"altersDynamicFields": {
"description": "Does the value of this field affect the definitions of other fields in the set?",
"type": "boolean"
},
"steadyState": {
"description": "Prevents triggering on new output until all values for fields with this property remain unchanged for 2 polls. It can be used to, e.g., not trigger on a new contact until the contact has completed typing their name. NOTE that this only applies to the `outputFields` of polling triggers.",
"type": "boolean"
},
"inputFormat": {
"description": "Useful when you expect the input to be part of a longer string. Put \"{{input}}\" in place of the user's input (IE: \"https://{{input}}.yourdomain.com\").",
"type": "string",
"pattern": "^.*{{input}}.*$"
},
"meta": {
"description": "Allows for additional metadata to be stored on the field. Supports simple key-values only (no sub-objects or arrays).",
"$ref": "/FieldMetaSchema"
}
},
"additionalProperties": false
},
"FunctionRequireSchema": {
"id": "/FunctionRequireSchema",
"description": "A path to a file that might have content like `module.exports = (z, bundle) => [{id: 123}];`.",
"type": "object",
"required": ["require"],
"properties": {
"require": {
"type": "string"
}
},
"additionalProperties": false
},
"FunctionSourceSchema": {
"id": "/FunctionSourceSchema",
"description": "Source code like `{source: \"return 1 + 2\"}` which the system will wrap in a function for you.",
"type": "object",
"required": ["source"],
"properties": {
"source": {
"type": "string",
"pattern": "return",
"description": "JavaScript code for the function body. This must end with a `return` statement."
},
"args": {
"type": "array",
"items": {
"type": "string"
},
"description": "Function signature. Defaults to `['z', 'bundle']` if not specified."
}
},
"additionalProperties": false
},
"FlatObjectSchema": {
"id": "/FlatObjectSchema",
"description": "An object whose values can only be primitives",
"type": "object",
"patternProperties": {
"[^\\s]+": {
"description": "Any key may exist in this flat object as long as its values are simple.",
"anyOf": [
{
"type": "null"
},
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
},
"additionalProperties": false
},
"FunctionSchema": {
"id": "/FunctionSchema",
"description": "Internal pointer to a function from the original source or the source code itself. Encodes arity and if `arguments` is used in the body. Note - just write normal functions and the system will encode the pointers for you. Or, provide {source: \"return 1 + 2\"} and the system will wrap in a function for you.",
"oneOf": [
{
"type": "string",
"pattern": "^\\$func\\$\\d+\\$[tf]\\$$"
},
{
"$ref": "/FunctionRequireSchema"
},
{
"$ref": "/FunctionSourceSchema"
}
]
},
"RequestSchema": {
"id": "/RequestSchema",
"description": "A representation of a HTTP request - you can use the `{{syntax}}` to inject authentication, field or global variables.",
"type": "object",
"properties": {
"method": {
"description": "The HTTP method for the request.",
"type": "string",
"default": "GET",
"enum": ["GET", "PUT", "POST", "PATCH", "DELETE", "HEAD"]
},
"url": {
"description": "A URL for the request (we will parse the querystring and merge with params). Keys and values will not be re-encoded.",
"type": "string"
},
"body": {
"description": "Can be nothing, a raw string or JSON (object or array).",
"oneOf": [
{
"type": "null"
},
{
"type": "string"
},
{
"type": "object"
},
{
"type": "array"
}
]
},
"params": {
"description": "A mapping of the querystring - will get merged with any query params in the URL. Keys and values will be encoded.",
"$ref": "/FlatObjectSchema"
},
"headers": {
"description": "The HTTP headers for the request.",
"$ref": "/FlatObjectSchema"
},
"auth": {
"description": "An object holding the auth parameters for OAuth1 request signing, like `{oauth_token: 'abcd', oauth_token_secret: '1234'}`. Or an array reserved (i.e. not implemented yet) to hold the username and password for Basic Auth. Like `['AzureDiamond', 'hunter2']`.",
"oneOf": [
{
"type": "array",
"items": {
"type": "string",
"minProperties": 2,
"maxProperties": 2
}
},
{
"$ref": "/FlatObjectSchema"
}
]
},
"removeMissingValuesFrom": {
"description": "Should missing values be sent? (empty strings, `null`, and `undefined` only — `[]`, `{}`, and `false` will still be sent). Allowed fields are `params` and `body`. The default is `false`, ex: ```removeMissingValuesFrom: { params: false, body: false }```",
"type": "object",
"properties": {
"params": {
"description": "Refers to data sent via a requests query params (`req.params`)",
"type": "boolean",
"default": false
},
"body": {
"description": "Refers to tokens sent via a requsts body (`req.body`)",
"type": "boolean",
"default": false
}
},
"additionalProperties": false
},
"serializeValueForCurlies": {
"description": "A function to customize how to serialize a value for curlies `{{var}}` in the request object. By default, when this is unspecified, the request client only replaces curlies where variables are strings, and would throw an error for non-strings. The function should accepts a single argument as the value to be serialized and return the string representation of the argument.",
"$ref": "/FunctionSchema"
},
"skipThrowForStatus": {
"description": "If `true`, don't throw an exception for response 400 <= status < 600 automatically before resolving with the response. Defaults to `false`.",
"type": "boolean",
"default": false
},
"skipEncodingChars": {
"description": "Contains the characters that you want left unencoded in the query params (`req.params`). If unspecified, `z.request()` will percent-encode non-ascii characters and these reserved characters: ``:$/?#[]@$&+,;=^@`\\``.",
"type": "string"
}
},
"additionalProperties": false
},
"RedirectRequestSchema": {
"id": "/RedirectRequestSchema",
"description": "A representation of a HTTP redirect - you can use the `{{syntax}}` to inject authentication, field or global variables.",
"type": "object",
"properties": {
"method": {
"description": "The HTTP method for the request.",
"type": "string",
"default": "GET",
"enum": ["GET"]
},
"url": {
"description": "A URL for the request (we will parse the querystring and merge with params). Keys and values will not be re-encoded.",
"type": "string"
},
"params": {
"description": "A mapping of the querystring - will get merged with any query params in the URL. Keys and values will be encoded.",
"$ref": "/FlatObjectSchema"
}
},
"additionalProperties": false
},
"FieldsSchema": {
"id": "/FieldsSchema",
"description": "An array or collection of fields.",
"type": "array",
"items": {
"$ref": "/FieldSchema"
}
},
"AuthenticationBasicConfigSchema": {
"id": "/AuthenticationBasicConfigSchema",
"description": "Config for Basic Authentication. No extra properties are required to setup Basic Auth, so you can leave this empty if your app uses Basic Auth.",
"type": "object",
"properties": {},
"additionalProperties": false
},
"AuthenticationCustomConfigSchema": {
"id": "/AuthenticationCustomConfigSchema",
"description": "Config for custom authentication (like API keys). No extra properties are required to setup this auth type, so you can leave this empty if your app uses a custom auth method.",
"type": "object",
"properties": {
"sendCode": {
"description": "EXPERIMENTAL: Define the call Zapier should make to send the OTP code.",
"oneOf": [
{
"$ref": "/RequestSchema"
},
{
"$ref": "/FunctionSchema"
}
]
}
},
"additionalProperties": false
},
"AuthenticationDigestConfigSchema": {
"id": "/AuthenticationDigestConfigSchema",
"description": "Config for Digest Authentication. No extra properties are required to setup Digest Auth, so you can leave this empty if your app uses Digets Auth.",
"type": "object",
"properties": {},
"additionalProperties": false
},
"AuthenticationOAuth1ConfigSchema": {
"id": "/AuthenticationOAuth1ConfigSchema",
"description": "Config for OAuth1 authentication.",
"type": "object",
"required": ["getRequestToken", "authorizeUrl", "getAccessToken"],
"properties": {
"getRequestToken": {
"description": "Define where Zapier will acquire a request token which is used for the rest of the three legged authentication process.",
"oneOf": [
{
"$ref": "/RequestSchema"
},
{
"$ref": "/FunctionSchema"
}
]
},
"authorizeUrl": {
"description": "Define where Zapier will redirect the user to authorize our app. Typically, you should append an `oauth_token` querystring parameter to the request.",
"oneOf": [
{
"$ref": "/RedirectRequestSchema"
},
{
"$ref": "/FunctionSchema"
}
]
},
"getAccessToken": {
"description": "Define how Zapier fetches an access token from the API",
"oneOf": [
{
"$ref": "/RequestSchema"
},
{
"$ref": "/FunctionSchema"
}
]
}
},
"additionalProperties": false
},
"AuthenticationOAuth2ConfigSchema": {
"id": "/AuthenticationOAuth2ConfigSchema",
"description": "Config for OAuth2 authentication.",
"type": "object",
"required": ["authorizeUrl", "getAccessToken"],
"properties": {
"authorizeUrl": {
"description": "Define where Zapier will redirect the user to authorize our app. Note: we append the redirect URL and state parameters to return value of this function.",
"oneOf": [
{
"$ref": "/RedirectRequestSchema"
},
{
"$ref": "/FunctionSchema"
}
]
},
"getAccessToken": {
"description": "Define how Zapier fetches an access token from the API",
"oneOf": [
{
"$ref": "/RequestSchema"
},
{
"$ref": "/FunctionSchema"
}
]
},
"refreshAccessToken": {
"description": "Define how Zapier will refresh the access token from the API",
"oneOf": [
{
"$ref": "/RequestSchema"
},
{
"$ref": "/FunctionSchema"
}
]
},
"codeParam": {
"description": "Define a non-standard code param Zapier should scrape instead.",
"type": "string"
},
"scope": {
"description": "What scope should Zapier request?",
"type": "string"
},
"autoRefresh": {
"description": "Should Zapier invoke `refreshAccessToken` when we receive an error for a 401 response?",
"type": "boolean"
},
"enablePkce": {
"description": "Should Zapier use PKCE for OAuth2?",
"type": "boolean"
}
},
"additionalProperties": false
},
"AuthenticationSessionConfigSchema": {
"id": "/AuthenticationSessionConfigSchema",
"description": "Config for session authentication.",
"type": "object",
"required": ["perform"],
"properties": {
"perform": {
"description": "Define how Zapier fetches the additional authData needed to make API calls.",
"oneOf": [
{
"$ref": "/RequestSchema"
},
{
"$ref": "/FunctionSchema"
}
]
}
},
"additionalProperties": false
},
"FieldOrFunctionSchema": {
"id": "/FieldOrFunctionSchema",
"description": "Represents an array of fields or functions.",
"type": "array",
"items": {
"oneOf": [
{
"$ref": "/FieldSchema"
},
{
"$ref": "/FunctionSchema"
}
]
}
},
"ThrottleOverrideObjectSchema": {
"id": "/ThrottleOverrideObjectSchema",
"description": "EXPERIMENTAL: Overrides the original throttle configuration based on a Zapier account attribute.",
"type": "object",
"required": ["window", "limit", "filter"],
"properties": {
"window": {
"description": "The timeframe, in seconds, within which the system tracks the number of invocations for an action. The number of invocations begins at zero at the start of each window.",
"type": "integer"
},
"limit": {
"description": "The maximum number of invocations for an action, allowed within the timeframe window.",
"type": "integer"
},
"filter": {
"description": "Account-based attribute to override the throttle by. You can set to one of the following: \"free\", \"trial\", \"paid\". Therefore, the throttle scope would be automatically set to \"account\" and ONLY the accounts based on the specified filter will have their requests throttled based on the throttle overrides while the rest are throttled based on the original configuration.",
"type": "string",
"enum": ["free", "trial", "paid"]
},
"retry": {
"description": "The effect of throttling on the tasks of the action. `true` means throttled tasks are automatically retried after some delay, while `false` means tasks are held without retry. It defaults to `true`. NOTE that it has no effect on polling triggers and should not be set.",
"type": "boolean"
}
},
"additionalProperties": false
},
"DynamicFieldsSchema": {
"id": "/DynamicFieldsSchema",
"description": "Like [/FieldsSchema](#fieldsschema) but you can provide functions to create dynamic or custom fields.",
"$ref": "/FieldOrFunctionSchema"
},
"KeySchema": {
"id": "/KeySchema",
"description": "A unique identifier for this item.",
"type": "string",
"minLength": 2,
"pattern": "^[a-zA-Z]+[a-zA-Z0-9_]*$"
},
"LockObjectSchema": {
"id": "/LockObjectSchema",
"description": "**INTERNAL USE ONLY**. Zapier uses this configuration for internal operation locking.",
"type": "object",
"required": ["key"],
"properties": {
"key": {
"description": "The key to use for locking. This should be unique to the operation. While actions of different integrations with the same key and scope will never lock each other out, actions of the same integration with the same key and scope will do. User data provided for the input fields can be used in the key with the use of the curly braces referencing. For example, to access the user data provided for the input field \"test_field\", use `{{bundle.inputData.test_field}}`. Note that a required input field should be referenced to get user data always.",
"type": "string",
"minLength": 1
},
"scope": {
"description": "By default, locks are scoped to the app. That is, all users of the app will share the same locks. If you want to restrict serial access to a specific user, auth, or account, you can set the scope to one or more of the following: 'user' - Locks based on user ids. 'auth' - Locks based on unique auth ids. 'account' - Locks for all users under a single account. You may also combine scopes. Note that \"app\" is included, always, in the scope provided. For example, a scope of ['account', 'auth'] would result to ['app', 'account', 'auth'].",
"type": "array",
"items": {
"enum": ["user", "auth", "account"],
"type": "string"
}
},
"timeout": {
"description": "The number of seconds to hold the lock before releasing it to become accessible to other task invokes that need it. If not provided, the default set by the app will be used. It cannot be more than 180.",
"type": "integer"
}
},
"additionalProperties": false
},
"ResultsSchema": {
"id": "/ResultsSchema",
"description": "An array of objects suitable for returning in perform calls.",
"type": "array",
"items": {
"type": "object",
"minProperties": 1
}
},
"ThrottleObjectSchema": {
"id": "/ThrottleObjectSchema",
"description": "Zapier uses this configuration to apply throttling when the limit for the window is exceeded. **NOTE:** The final key used for the throttling is formed as a combination of all the configurations; key, window, limit, and scope. To share a limit across multiple actions in an integration, each should have the same configuration set without \"action\" in the scope.",
"type": "object",
"required": ["window", "limit"],
"properties": {
"window": {
"description": "The timeframe, in seconds, within which the system tracks the number of invocations for an action. The number of invocations begins at zero at the start of each window.",
"type": "integer"
},
"limit": {
"description": "The maximum number of invocations for an action, allowed within the timeframe window.",
"type": "integer"
},
"key": {
"description": "The key to throttle with in combination with the scope. User data provided for the input fields can be used in the key with the use of the curly braces referencing. For example, to access the user data provided for the input field \"test_field\", use `{{bundle.inputData.test_field}}`. Note that a required input field should be referenced to get user data always.",
"type": "string",
"minLength": 1
},
"scope": {
"description": "The granularity to throttle by. You can set the scope to one or more of the following: 'user' - Throttles based on user ids. 'auth' - Throttles based on auth ids. 'account' - Throttles based on account ids for all users under a single account. 'action' - Throttles the action it is set on separately from other actions. By default, throttling is scoped to the action and account.",
"type": "array",
"items": {
"enum": ["user", "auth", "account", "action"],
"type": "string"
}
},
"retry": {
"description": "The effect of throttling on the tasks of the action. `true` means throttled tasks are automatically retried after some delay, while `false` means tasks are held without retry. It defaults to `true`. NOTE that it has no effect on polling triggers and should not be set.",
"type": "boolean"
},
"filter": {
"description": "EXPERIMENTAL: Account-based attribute to override the throttle by. You can set to one of the following: \"free\", \"trial\", \"paid\". Therefore, the throttle scope would be automatically set to \"account\" and ONLY the accounts based on the specified filter will have their requests throttled based on the throttle overrides while the rest are throttled based on the original configuration.",
"type": "string",
"enum": ["free", "trial", "paid"]
},
"overrides": {
"description": "EXPERIMENTAL: Overrides the original throttle configuration based on a Zapier account attribute.",
"type": "array",
"minItems": 1,
"items": {
"$ref": "/ThrottleOverrideObjectSchema"
}
}
},
"additionalProperties": false
},
"BasicDisplaySchema": {
"id": "/BasicDisplaySchema",
"description": "Represents user information for a trigger, search, or create.",
"type": "object",
"properties": {
"label": {
"description": "A short label like \"New Record\" or \"Create Record in Project\". Optional if `hidden` is true.",
"type": "string",
"minLength": 2,
"maxLength": 64,
"docAnnotation": {
"required": {
"type": "replace",
"value": "**yes** (with exceptions, see description)"
}
}
},
"description": {
"description": "A description of what this trigger, search, or create does. Optional if `hidden` is true.",
"type": "string",
"minLength": 1,
"maxLength": 1000,
"docAnnotation": {
"required": {
"type": "replace",
"value": "**yes** (with exceptions, see description)"
}
}
},
"directions": {
"description": "A short blurb that can explain how to get this working. EG: how and where to copy-paste a static hook URL into your application. Only evaluated for static webhooks.",
"type": "string",
"minLength": 12,
"maxLength": 1000
},
"hidden": {
"description": "Should this operation be unselectable by users?",
"type": "boolean"
}
},
"additionalProperties": false
},
"BasicOperationSchema": {
"id": "/BasicOperationSchema",
"description": "Represents the fundamental mechanics of triggers, searches, or creates.",
"type": "object",
"required": ["perform"],
"properties": {
"resource": {
"description": "Optionally reference and extends a resource. Allows Zapier to automatically tie together samples, lists and hooks, greatly improving the UX. EG: if you had another trigger reusing a resource but filtering the results.",
"$ref": "/KeySchema"
},
"perform": {
"description": "How will Zapier get the data? This can be a function like `(z) => [{id: 123}]` or a request like `{url: 'http...'}`.",
"oneOf": [
{
"$ref": "/RequestSchema"
},
{
"$ref": "/FunctionSchema"
}
]
},
"inputFields": {
"description": "What should the form a user sees and configures look like?",
"$ref": "/DynamicFieldsSchema"
},
"outputFields": {
"description": "What fields of data will this return? Will use resource outputFields if missing, will also use sample if available.",
"$ref": "/DynamicFieldsSchema"
},
"sample": {
"description": "What does a sample of data look like? Will use resource sample if missing. Requirement waived if `display.hidden` is true or if this belongs to a resource that has a top-level sample",
"type": "object",
"minProperties": 1,
"docAnnotation": {
"required": {
"type": "replace",
"value": "**yes** (with exceptions, see description)"
}
}
},
"lock": {
"description": "**INTERNAL USE ONLY**. Zapier uses this configuration for internal operation locking.",
"$ref": "/LockObjectSchema"
},
"throttle": {
"description": "Zapier uses this configuration to apply throttling when the limit for the window is exceeded.",
"$ref": "/ThrottleObjectSchema"
}
},
"additionalProperties": false
},
"BasicHookOperationSchema": {
"id": "/BasicHookOperationSchema",
"description": "Represents the inbound mechanics of hooks with optional subscribe/unsubscribe. Defers to list for fields.",
"type": "object",
"required": ["perform"],
"properties": {
"type": {
"description": "Must be explicitly set to `\"hook\"` unless this hook is defined as part of a resource, in which case it's optional.",
"type": "string",
"enum": ["hook"],
"docAnnotation": {
"required": {
"type": "replace",
"value": "**yes** (with exceptions, see description)"
}
}
},
"resource": {
"description": "Optionally reference and extends a resource. Allows Zapier to automatically tie together samples, lists and hooks, greatly improving the UX. EG: if you had another trigger reusing a resource but filtering the results.",
"$ref": "/KeySchema"
},
"perform": {
"description": "A function that processes the inbound webhook request.",
"$ref": "/FunctionSchema"
},
"performList": {
"description": "Fetch a list of items on demand during testing instead of waiting for a hook. You can also consider resources and their built-in hook/list methods. Note: this is required for public apps to ensure the best UX for the end-user. For private apps, this is strongly recommended for testing REST Hooks. Otherwise, you can ignore warnings about this property with the `--without-style` flag during `zapier push`.",
"oneOf": [
{
"$ref": "/RequestSchema"
},
{
"$ref": "/FunctionSchema"
}
],
"docAnnotation": {
"required": {
"type": "replace",
"value": "**yes** (with exceptions, see description)"
}
}
},
"canPaginate": {
"description": "Does this endpoint support pagination via temporary cursor storage?",
"type": "boolean"
},
"performSubscribe": {
"description": "Takes a URL and any necessary data from the user and subscribes. Note: this is required for public apps to ensure the best UX for the end-user. For private apps, this is strongly recommended for testing REST Hooks. Otherwise, you can ignore warnings about this property with the `--without-style` flag during `zapier push`.",
"oneOf": [
{
"$ref": "/RequestSchema"
},
{
"$ref": "/FunctionSchema"
}
],
"docAnnotation": {
"required": {
"type": "replace",
"value": "**yes** (with exceptions, see description)"
}
}
},
"performUnsubscribe": {
"description": "Takes a URL and data from a previous subscribe call and unsubscribes. Note: this is required for public apps to ensure the best UX for the end-user. For private apps, this is strongly recommended for testing REST Hooks. Otherwise, you can ignore warnings about this property with the `--without-style` flag during `zapier push`.",
"oneOf": [
{
"$ref": "/RequestSchema"
},
{
"$ref": "/FunctionSchema"
}
],
"docAnnotation": {
"required": {
"type": "replace",
"value": "**yes** (with exceptions, see description)"
}
}
},
"inputFields": {
"description": "What should the form a user sees and configures look like?",
"$ref": "/DynamicFieldsSchema"
},
"outputFields": {
"description": "What fields of data will this return? Will use resource outputFields if missing, will also use sample if available.",
"$ref": "/DynamicFieldsSchema"
},
"sample": {
"description": "What does a sample of data look like? Will use resource sample if missing. Requirement waived if `display.hidden` is true or if this belongs to a resource that has a top-level sample",
"type": "object",
"minProperties": 1,
"docAnnotation": {
"required": {
"type": "replace",
"value": "**yes** (with exceptions, see description)"
}
}
}
},
"additionalProperties": false
},
"BasicPollingOperationSchema": {
"id": "/BasicPollingOperationSchema",
"description": "Represents the fundamental mechanics of a trigger.",
"type": "object",
"required": ["perform"],
"properties": {
"type": {
"description": "Clarify how this operation works (polling == pull or hook == push).",
"type": "string",
"default": "polling",
"enum": ["polling"]
},
"resource": {
"description": "Optionally reference and extends a resource. Allows Zapier to automatically tie together samples, lists and hooks, greatly improving the UX. EG: if you had another trigger reusing a resource but filtering the results.",
"$ref": "/KeySchema"
},
"perform": {
"description": "How will Zapier get the data? This can be a function like `(z) => [{id: 123}]` or a request like `{url: 'http...'}`.",
"oneOf": [
{
"$ref": "/RequestSchema"
},
{
"$ref": "/FunctionSchema"
}
]
},
"canPaginate": {
"description": "Does this endpoint support pagination via temporary cursor storage?",
"type": "boolean"
},
"inputFields": {
"description": "What should the form a user sees and configures look like?",
"$ref": "/DynamicFieldsSchema"
},
"outputFields": {
"description": "What fields of data will this return? Will use resource outputFields if missing, will also use sample if available.",
"$ref": "/DynamicFieldsSchema"
},
"sample": {
"description": "What does a sample of data look like? Will use resource sample if missing. Requirement waived if `display.hidden` is true or if this belongs to a resource that has a top-level sample",