growwer 1.1.1 → 2.1.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.
Files changed (203) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +57 -4
  3. data/docs/AccountApi.md +1 -1
  4. data/docs/AdvanceTestOrderRequest.md +18 -0
  5. data/docs/BalanceLowEventData.md +20 -0
  6. data/docs/BalanceLowEventDataWallet.md +20 -0
  7. data/docs/CatalogueApi.md +2 -2
  8. data/docs/CreateWebhookRequest.md +24 -0
  9. data/docs/GetMe200Response.md +3 -1
  10. data/docs/ListWebhookDeliveries200Response.md +20 -0
  11. data/docs/ListWebhooks200Response.md +20 -0
  12. data/docs/OrderChannel.md +1 -1
  13. data/docs/OrderEventData.md +18 -0
  14. data/docs/SellerOrderChannel.md +2 -2
  15. data/docs/TestHelpersApi.md +222 -0
  16. data/docs/TopUpTestWallet200Response.md +20 -0
  17. data/docs/TopUpTestWalletRequest.md +18 -0
  18. data/docs/UpdateWebhookRequest.md +26 -0
  19. data/docs/Webhook.md +38 -0
  20. data/docs/WebhookDelivery.md +32 -0
  21. data/docs/WebhookDeliveryAttempt.md +26 -0
  22. data/docs/WebhookEvent.md +28 -0
  23. data/docs/WebhookEventData.md +51 -0
  24. data/docs/WebhookEventType.md +15 -0
  25. data/docs/WebhookTestEventData.md +18 -0
  26. data/docs/WebhookWithSecret.md +40 -0
  27. data/docs/WebhooksApi.md +662 -0
  28. data/growwer.gemspec +1 -1
  29. data/lib/growwer/api/account_api.rb +3 -3
  30. data/lib/growwer/api/buyer_orders_api.rb +1 -1
  31. data/lib/growwer/api/buyer_wallet_api.rb +1 -1
  32. data/lib/growwer/api/catalogue_api.rb +5 -5
  33. data/lib/growwer/api/files_api.rb +1 -1
  34. data/lib/growwer/api/managed_services_api.rb +1 -1
  35. data/lib/growwer/api/projects_api.rb +1 -1
  36. data/lib/growwer/api/saved_filters_api.rb +1 -1
  37. data/lib/growwer/api/seller_account_api.rb +1 -1
  38. data/lib/growwer/api/seller_medias_api.rb +1 -1
  39. data/lib/growwer/api/seller_orders_api.rb +1 -1
  40. data/lib/growwer/api/seller_wallet_api.rb +1 -1
  41. data/lib/growwer/api/test_helpers_api.rb +254 -0
  42. data/lib/growwer/api/webhooks_api.rb +707 -0
  43. data/lib/growwer/api_client.rb +2 -2
  44. data/lib/growwer/api_error.rb +1 -1
  45. data/lib/growwer/api_model_base.rb +1 -1
  46. data/lib/growwer/configuration.rb +1 -1
  47. data/lib/growwer/models/advance_test_order_request.rb +189 -0
  48. data/lib/growwer/models/balance.rb +1 -1
  49. data/lib/growwer/models/balance_low_event_data.rb +192 -0
  50. data/lib/growwer/models/balance_low_event_data_wallet.rb +192 -0
  51. data/lib/growwer/models/catalogue_media.rb +1 -1
  52. data/lib/growwer/models/catalogue_media_flash_offer.rb +1 -1
  53. data/lib/growwer/models/catalogue_media_metrics.rb +1 -1
  54. data/lib/growwer/models/catalogue_offer.rb +1 -1
  55. data/lib/growwer/models/catalogue_offer_or_null.rb +1 -1
  56. data/lib/growwer/models/catalogue_post_offer.rb +1 -1
  57. data/lib/growwer/models/catalogue_post_offer_all_of_extras.rb +1 -1
  58. data/lib/growwer/models/catalogue_post_offer_all_of_extras_sensitive_topic.rb +1 -1
  59. data/lib/growwer/models/code_name.rb +1 -1
  60. data/lib/growwer/models/count_saved_filter_medias200_response.rb +1 -1
  61. data/lib/growwer/models/create_project_request.rb +1 -1
  62. data/lib/growwer/models/create_saved_filter_request.rb +1 -1
  63. data/lib/growwer/models/create_seller_media_request.rb +1 -1
  64. data/lib/growwer/models/create_seller_media_request_post_offer.rb +1 -1
  65. data/lib/growwer/models/create_webhook_request.rb +248 -0
  66. data/lib/growwer/models/error.rb +1 -1
  67. data/lib/growwer/models/get_buyer_wallet200_response.rb +1 -1
  68. data/lib/growwer/models/get_me200_response.rb +57 -20
  69. data/lib/growwer/models/get_me200_response_buyer.rb +1 -1
  70. data/lib/growwer/models/get_me200_response_catalogue.rb +1 -1
  71. data/lib/growwer/models/get_me200_response_managed_service.rb +1 -1
  72. data/lib/growwer/models/get_me200_response_seller.rb +2 -1
  73. data/lib/growwer/models/get_seller_wallet200_response.rb +1 -1
  74. data/lib/growwer/models/get_vocabulary200_response.rb +1 -1
  75. data/lib/growwer/models/get_vocabulary200_response_topics_inner.rb +1 -1
  76. data/lib/growwer/models/invoice.rb +1 -1
  77. data/lib/growwer/models/link_addition_order_briefing.rb +1 -1
  78. data/lib/growwer/models/link_addition_order_briefing_request.rb +1 -1
  79. data/lib/growwer/models/list_buyer_transactions200_response.rb +1 -1
  80. data/lib/growwer/models/list_flash_offers200_response.rb +1 -1
  81. data/lib/growwer/models/list_invoices200_response.rb +1 -1
  82. data/lib/growwer/models/list_managed_service_campaigns200_response.rb +1 -1
  83. data/lib/growwer/models/list_managed_service_proposals200_response.rb +1 -1
  84. data/lib/growwer/models/list_orders200_response.rb +1 -1
  85. data/lib/growwer/models/list_projects200_response.rb +1 -1
  86. data/lib/growwer/models/list_saved_filters200_response.rb +1 -1
  87. data/lib/growwer/models/list_seller_medias200_response.rb +1 -1
  88. data/lib/growwer/models/list_seller_orders200_response.rb +1 -1
  89. data/lib/growwer/models/list_seller_transactions200_response.rb +1 -1
  90. data/lib/growwer/models/list_webhook_deliveries200_response.rb +192 -0
  91. data/lib/growwer/models/list_webhooks200_response.rb +192 -0
  92. data/lib/growwer/models/list_withdrawals200_response.rb +1 -1
  93. data/lib/growwer/models/managed_service_campaign.rb +1 -1
  94. data/lib/growwer/models/managed_service_campaign_project.rb +1 -1
  95. data/lib/growwer/models/managed_service_campaign_proposal_counts.rb +1 -1
  96. data/lib/growwer/models/managed_service_campaign_strategy.rb +1 -1
  97. data/lib/growwer/models/managed_service_proposal.rb +1 -1
  98. data/lib/growwer/models/managed_service_proposal_briefing.rb +1 -1
  99. data/lib/growwer/models/managed_service_proposal_briefing_links_inner.rb +1 -1
  100. data/lib/growwer/models/managed_service_proposal_media.rb +1 -1
  101. data/lib/growwer/models/managed_service_proposal_review.rb +1 -1
  102. data/lib/growwer/models/managed_service_proposal_review_request.rb +1 -1
  103. data/lib/growwer/models/managed_service_proposal_review_request_reviews_inner.rb +1 -1
  104. data/lib/growwer/models/managed_service_proposals_estimate.rb +1 -1
  105. data/lib/growwer/models/managed_service_proposals_estimate_request.rb +1 -1
  106. data/lib/growwer/models/managed_service_request.rb +1 -1
  107. data/lib/growwer/models/managed_service_request_sent.rb +1 -1
  108. data/lib/growwer/models/money.rb +1 -1
  109. data/lib/growwer/models/money_or_null.rb +1 -1
  110. data/lib/growwer/models/order.rb +1 -1
  111. data/lib/growwer/models/order_action_reason.rb +1 -1
  112. data/lib/growwer/models/order_briefing.rb +1 -1
  113. data/lib/growwer/models/order_channel.rb +4 -4
  114. data/lib/growwer/models/order_create_request.rb +1 -1
  115. data/lib/growwer/models/order_delivery.rb +1 -1
  116. data/lib/growwer/models/order_draft.rb +1 -1
  117. data/lib/growwer/models/order_estimate.rb +1 -1
  118. data/lib/growwer/models/order_estimate_request.rb +1 -1
  119. data/lib/growwer/models/order_estimate_request_briefing.rb +1 -1
  120. data/lib/growwer/models/order_event_data.rb +165 -0
  121. data/lib/growwer/models/order_link.rb +1 -1
  122. data/lib/growwer/models/order_link_request.rb +1 -1
  123. data/lib/growwer/models/order_media.rb +1 -1
  124. data/lib/growwer/models/order_project.rb +1 -1
  125. data/lib/growwer/models/order_state_history_inner.rb +1 -1
  126. data/lib/growwer/models/order_state_history_inner_reason.rb +1 -1
  127. data/lib/growwer/models/post_order_briefing.rb +1 -1
  128. data/lib/growwer/models/post_order_briefing_request.rb +1 -1
  129. data/lib/growwer/models/project.rb +1 -1
  130. data/lib/growwer/models/project_catalogue_media.rb +1 -1
  131. data/lib/growwer/models/project_catalogue_media_all_of_project.rb +1 -1
  132. data/lib/growwer/models/project_catalogue_media_all_of_project_ai_keywords.rb +1 -1
  133. data/lib/growwer/models/put_seller_holiday200_response.rb +1 -1
  134. data/lib/growwer/models/put_seller_holiday_request.rb +1 -1
  135. data/lib/growwer/models/request_medias201_response.rb +1 -1
  136. data/lib/growwer/models/request_medias_request.rb +1 -1
  137. data/lib/growwer/models/saved_filter.rb +1 -1
  138. data/lib/growwer/models/saved_filter_notifications.rb +1 -1
  139. data/lib/growwer/models/seller_fees.rb +1 -1
  140. data/lib/growwer/models/seller_fees_or_null.rb +1 -1
  141. data/lib/growwer/models/seller_media.rb +1 -1
  142. data/lib/growwer/models/seller_media_flash_offer.rb +1 -1
  143. data/lib/growwer/models/seller_media_link_addition_offer.rb +1 -1
  144. data/lib/growwer/models/seller_media_link_addition_offer_pricing_options_inner.rb +1 -1
  145. data/lib/growwer/models/seller_media_post_offer.rb +1 -1
  146. data/lib/growwer/models/seller_media_post_offer_pricing_options_inner.rb +1 -1
  147. data/lib/growwer/models/seller_order.rb +1 -1
  148. data/lib/growwer/models/seller_order_briefing.rb +1 -1
  149. data/lib/growwer/models/seller_order_channel.rb +7 -7
  150. data/lib/growwer/models/seller_order_draft.rb +1 -1
  151. data/lib/growwer/models/seller_order_draft_file.rb +1 -1
  152. data/lib/growwer/models/seller_order_post_delivery.rb +1 -1
  153. data/lib/growwer/models/seller_order_project.rb +1 -1
  154. data/lib/growwer/models/seller_order_refutation.rb +1 -1
  155. data/lib/growwer/models/seller_order_rejection.rb +1 -1
  156. data/lib/growwer/models/seller_order_rejection_reason.rb +1 -1
  157. data/lib/growwer/models/seller_post_order_briefing.rb +1 -1
  158. data/lib/growwer/models/seller_transaction.rb +1 -1
  159. data/lib/growwer/models/top_up_test_wallet200_response.rb +191 -0
  160. data/lib/growwer/models/top_up_test_wallet_request.rb +165 -0
  161. data/lib/growwer/models/transaction.rb +1 -1
  162. data/lib/growwer/models/update_project_request.rb +1 -1
  163. data/lib/growwer/models/update_seller_media_request.rb +1 -1
  164. data/lib/growwer/models/update_seller_media_request_extra_services_inner.rb +1 -1
  165. data/lib/growwer/models/update_seller_media_request_link_addition_offer.rb +1 -1
  166. data/lib/growwer/models/update_seller_media_request_link_addition_offer_pricing_options_inner.rb +1 -1
  167. data/lib/growwer/models/update_seller_media_request_post_offer.rb +1 -1
  168. data/lib/growwer/models/update_seller_media_request_post_offer_pricing_options_inner.rb +1 -1
  169. data/lib/growwer/models/update_webhook_request.rb +245 -0
  170. data/lib/growwer/models/upload_file201_response.rb +1 -1
  171. data/lib/growwer/models/webhook.rb +395 -0
  172. data/lib/growwer/models/webhook_delivery.rb +365 -0
  173. data/lib/growwer/models/webhook_delivery_attempt.rb +264 -0
  174. data/lib/growwer/models/webhook_event.rb +324 -0
  175. data/lib/growwer/models/webhook_event_data.rb +104 -0
  176. data/lib/growwer/models/webhook_event_type.rb +46 -0
  177. data/lib/growwer/models/webhook_test_event_data.rb +166 -0
  178. data/lib/growwer/models/webhook_with_secret.rb +413 -0
  179. data/lib/growwer/models/withdrawal.rb +1 -1
  180. data/lib/growwer/version.rb +2 -2
  181. data/lib/growwer.rb +21 -1
  182. data/spec/api/test_helpers_api_spec.rb +74 -0
  183. data/spec/api/webhooks_api_spec.rb +154 -0
  184. data/spec/models/advance_test_order_request_spec.rb +40 -0
  185. data/spec/models/balance_low_event_data_spec.rb +42 -0
  186. data/spec/models/balance_low_event_data_wallet_spec.rb +42 -0
  187. data/spec/models/create_webhook_request_spec.rb +54 -0
  188. data/spec/models/list_webhook_deliveries200_response_spec.rb +42 -0
  189. data/spec/models/list_webhooks200_response_spec.rb +42 -0
  190. data/spec/models/order_event_data_spec.rb +36 -0
  191. data/spec/models/top_up_test_wallet200_response_spec.rb +42 -0
  192. data/spec/models/top_up_test_wallet_request_spec.rb +36 -0
  193. data/spec/models/update_webhook_request_spec.rb +60 -0
  194. data/spec/models/webhook_delivery_attempt_spec.rb +64 -0
  195. data/spec/models/webhook_delivery_spec.rb +86 -0
  196. data/spec/models/webhook_event_data_spec.rb +32 -0
  197. data/spec/models/webhook_event_spec.rb +78 -0
  198. data/spec/models/webhook_event_type_spec.rb +30 -0
  199. data/spec/models/webhook_spec.rb +100 -0
  200. data/spec/models/webhook_test_event_data_spec.rb +36 -0
  201. data/spec/models/webhook_with_secret_spec.rb +106 -0
  202. data/spec/spec_helper.rb +1 -1
  203. metadata +187 -107
@@ -0,0 +1,165 @@
1
+ =begin
2
+ #Growwer API
3
+
4
+ #The Growwer customer API. Authenticate every call with an API key created on your profile page, sent as `Authorization: Bearer <key>`. A read key can call every GET operation; writes need a read and write key and an `Idempotency-Key` header. Idempotency: use a new `Idempotency-Key` (1 to 255 printable ASCII characters without spaces) for each operation and reuse it only to retry that same operation. Keys belong to your account, not to one API key. - A successful write is stored for 30 days: a retry with the same key and the same request replays its response with `Idempotent-Replayed: true` and does nothing again. - A refused write (4xx) has no effect and releases its key: once you fix the cause, retry with the same key and the write runs. - A failed write (5xx) may have taken effect, so it is never run again under its key: a retry gets 409 `idempotency_outcome_unknown`. Check whether it took effect before retrying with a new key. - A retry while the first request is still running gets 409 `idempotency_request_in_progress`. A request still running after 5 minutes is treated as failed: a retry gets 409 `idempotency_outcome_unknown`. - The same key with a different request (method, path, query or body) gets 409 `idempotency_key_reused`. A write without the header gets 400 `idempotency_key_required`. Test mode: a test key (`gw_sk_test_` plus 43 characters) works on your account's test data alone, apart from the real catalogue: test projects, orders and files, and a test wallet that starts at 1,000.00 EUR. Every response to a test key carries `Growwer-Mode: test`, and an id of the other mode answers 404 as a missing object would. - A test order is validated and debited from the test wallet as a live one is. A simulated seller accepts it a minute later and delivers it two minutes after that; you approve the delivery or request an update. - The Test helpers top the test wallet up, move a test order on at once and reset your test data. A live key on them gets 403 `test_mode_only`. - A test key on the seller and managed service operations, on a project's catalogue writes and on media requests gets 403 `not_available_in_test_mode`. - Idempotency keys are scoped per mode: the same `Idempotency-Key` sent with a live and a test key never replays the other mode's response. Webhooks: a subscription receives the events of its mode, signed as Standard Webhooks. A subscription created with a live key gets the events of your orders and your wallet; one created with a test key gets those of your test orders and test wallet, with `mode: test`, and never a live event. `x-webhooks` lists every event Growwer POSTs and its payload; the WebhookEvent schema describes the headers, the signature and the retries. Every response carries `X-Request-Id`. Errors share one shape, `{code, message, requestId, details?}`. Money is integer cents plus a currency code and dates are ISO-8601.
5
+
6
+ The version of the OpenAPI document: 1
7
+ Contact: support@growwer.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.24.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module Growwer
17
+ class TopUpTestWalletRequest < ApiModelBase
18
+ # What to credit, in EUR: from 1 to 1000000 cents.
19
+ attr_accessor :amount
20
+
21
+ # Attribute mapping from ruby-style variable name to JSON key.
22
+ def self.attribute_map
23
+ {
24
+ :'amount' => :'amount'
25
+ }
26
+ end
27
+
28
+ # Returns attribute mapping this model knows about
29
+ def self.acceptable_attribute_map
30
+ attribute_map
31
+ end
32
+
33
+ # Returns all the JSON keys this model knows about
34
+ def self.acceptable_attributes
35
+ acceptable_attribute_map.values
36
+ end
37
+
38
+ # Attribute type mapping.
39
+ def self.openapi_types
40
+ {
41
+ :'amount' => :'Money'
42
+ }
43
+ end
44
+
45
+ # List of attributes with nullable: true
46
+ def self.openapi_nullable
47
+ Set.new([
48
+ ])
49
+ end
50
+
51
+ # Initializes the object
52
+ # @param [Hash] attributes Model attributes in the form of hash
53
+ def initialize(attributes = {})
54
+ if (!attributes.is_a?(Hash))
55
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Growwer::TopUpTestWalletRequest` initialize method"
56
+ end
57
+
58
+ # check to see if the attribute exists and convert string to symbol for hash key
59
+ acceptable_attribute_map = self.class.acceptable_attribute_map
60
+ attributes = attributes.each_with_object({}) { |(k, v), h|
61
+ if (!acceptable_attribute_map.key?(k.to_sym))
62
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Growwer::TopUpTestWalletRequest`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
63
+ end
64
+ h[k.to_sym] = v
65
+ }
66
+
67
+ if attributes.key?(:'amount')
68
+ self.amount = attributes[:'amount']
69
+ else
70
+ self.amount = nil
71
+ end
72
+ end
73
+
74
+ # Show invalid properties with the reasons. Usually used together with valid?
75
+ # @return Array for valid properties with the reasons
76
+ def list_invalid_properties
77
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
78
+ invalid_properties = Array.new
79
+ if @amount.nil?
80
+ invalid_properties.push('invalid value for "amount", amount cannot be nil.')
81
+ end
82
+
83
+ invalid_properties
84
+ end
85
+
86
+ # Check to see if the all the properties in the model are valid
87
+ # @return true if the model is valid
88
+ def valid?
89
+ warn '[DEPRECATED] the `valid?` method is obsolete'
90
+ return false if @amount.nil?
91
+ true
92
+ end
93
+
94
+ # Custom attribute writer method with validation
95
+ # @param [Object] amount Value to be assigned
96
+ def amount=(amount)
97
+ if amount.nil?
98
+ fail ArgumentError, 'amount cannot be nil'
99
+ end
100
+
101
+ @amount = amount
102
+ end
103
+
104
+ # Checks equality by comparing each attribute.
105
+ # @param [Object] Object to be compared
106
+ def ==(o)
107
+ return true if self.equal?(o)
108
+ self.class == o.class &&
109
+ amount == o.amount
110
+ end
111
+
112
+ # @see the `==` method
113
+ # @param [Object] Object to be compared
114
+ def eql?(o)
115
+ self == o
116
+ end
117
+
118
+ # Calculates hash code according to all attributes.
119
+ # @return [Integer] Hash code
120
+ def hash
121
+ [amount].hash
122
+ end
123
+
124
+ # Builds the object from hash
125
+ # @param [Hash] attributes Model attributes in the form of hash
126
+ # @return [Object] Returns the model itself
127
+ def self.build_from_hash(attributes)
128
+ return nil unless attributes.is_a?(Hash)
129
+ attributes = attributes.transform_keys(&:to_sym)
130
+ transformed_hash = {}
131
+ openapi_types.each_pair do |key, type|
132
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
133
+ transformed_hash["#{key}"] = nil
134
+ elsif type =~ /\AArray<(.*)>/i
135
+ # check to ensure the input is an array given that the attribute
136
+ # is documented as an array but the input is not
137
+ if attributes[attribute_map[key]].is_a?(Array)
138
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
139
+ end
140
+ elsif !attributes[attribute_map[key]].nil?
141
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
142
+ end
143
+ end
144
+ new(transformed_hash)
145
+ end
146
+
147
+ # Returns the object in the form of hash
148
+ # @return [Hash] Returns the object in the form of hash
149
+ def to_hash
150
+ hash = {}
151
+ self.class.attribute_map.each_pair do |attr, param|
152
+ value = self.send(attr)
153
+ if value.nil?
154
+ is_nullable = self.class.openapi_nullable.include?(attr)
155
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
156
+ end
157
+
158
+ hash[param] = _to_hash(value)
159
+ end
160
+ hash
161
+ end
162
+
163
+ end
164
+
165
+ end
@@ -1,7 +1,7 @@
1
1
  =begin
2
2
  #Growwer API
3
3
 
4
- #The Growwer customer API. Authenticate every call with an API key created on your profile page, sent as `Authorization: Bearer <key>`. A read key can call every GET operation; writes need a read and write key and an `Idempotency-Key` header. Idempotency: use a new `Idempotency-Key` (1 to 255 printable ASCII characters without spaces) for each operation and reuse it only to retry that same operation. Keys belong to your account, not to one API key. - A successful write is stored for 30 days: a retry with the same key and the same request replays its response with `Idempotent-Replayed: true` and does nothing again. - A refused write (4xx) has no effect and releases its key: once you fix the cause, retry with the same key and the write runs. - A failed write (5xx) may have taken effect, so it is never run again under its key: a retry gets 409 `idempotency_outcome_unknown`. Check whether it took effect before retrying with a new key. - A retry while the first request is still running gets 409 `idempotency_request_in_progress`. A request still running after 5 minutes is treated as failed: a retry gets 409 `idempotency_outcome_unknown`. - The same key with a different request (method, path, query or body) gets 409 `idempotency_key_reused`. A write without the header gets 400 `idempotency_key_required`. Every response carries `X-Request-Id`. Errors share one shape, `{code, message, requestId, details?}`. Money is integer cents plus a currency code and dates are ISO-8601.
4
+ #The Growwer customer API. Authenticate every call with an API key created on your profile page, sent as `Authorization: Bearer <key>`. A read key can call every GET operation; writes need a read and write key and an `Idempotency-Key` header. Idempotency: use a new `Idempotency-Key` (1 to 255 printable ASCII characters without spaces) for each operation and reuse it only to retry that same operation. Keys belong to your account, not to one API key. - A successful write is stored for 30 days: a retry with the same key and the same request replays its response with `Idempotent-Replayed: true` and does nothing again. - A refused write (4xx) has no effect and releases its key: once you fix the cause, retry with the same key and the write runs. - A failed write (5xx) may have taken effect, so it is never run again under its key: a retry gets 409 `idempotency_outcome_unknown`. Check whether it took effect before retrying with a new key. - A retry while the first request is still running gets 409 `idempotency_request_in_progress`. A request still running after 5 minutes is treated as failed: a retry gets 409 `idempotency_outcome_unknown`. - The same key with a different request (method, path, query or body) gets 409 `idempotency_key_reused`. A write without the header gets 400 `idempotency_key_required`. Test mode: a test key (`gw_sk_test_` plus 43 characters) works on your account's test data alone, apart from the real catalogue: test projects, orders and files, and a test wallet that starts at 1,000.00 EUR. Every response to a test key carries `Growwer-Mode: test`, and an id of the other mode answers 404 as a missing object would. - A test order is validated and debited from the test wallet as a live one is. A simulated seller accepts it a minute later and delivers it two minutes after that; you approve the delivery or request an update. - The Test helpers top the test wallet up, move a test order on at once and reset your test data. A live key on them gets 403 `test_mode_only`. - A test key on the seller and managed service operations, on a project's catalogue writes and on media requests gets 403 `not_available_in_test_mode`. - Idempotency keys are scoped per mode: the same `Idempotency-Key` sent with a live and a test key never replays the other mode's response. Webhooks: a subscription receives the events of its mode, signed as Standard Webhooks. A subscription created with a live key gets the events of your orders and your wallet; one created with a test key gets those of your test orders and test wallet, with `mode: test`, and never a live event. `x-webhooks` lists every event Growwer POSTs and its payload; the WebhookEvent schema describes the headers, the signature and the retries. Every response carries `X-Request-Id`. Errors share one shape, `{code, message, requestId, details?}`. Money is integer cents plus a currency code and dates are ISO-8601.
5
5
 
6
6
  The version of the OpenAPI document: 1
7
7
  Contact: support@growwer.com
@@ -1,7 +1,7 @@
1
1
  =begin
2
2
  #Growwer API
3
3
 
4
- #The Growwer customer API. Authenticate every call with an API key created on your profile page, sent as `Authorization: Bearer <key>`. A read key can call every GET operation; writes need a read and write key and an `Idempotency-Key` header. Idempotency: use a new `Idempotency-Key` (1 to 255 printable ASCII characters without spaces) for each operation and reuse it only to retry that same operation. Keys belong to your account, not to one API key. - A successful write is stored for 30 days: a retry with the same key and the same request replays its response with `Idempotent-Replayed: true` and does nothing again. - A refused write (4xx) has no effect and releases its key: once you fix the cause, retry with the same key and the write runs. - A failed write (5xx) may have taken effect, so it is never run again under its key: a retry gets 409 `idempotency_outcome_unknown`. Check whether it took effect before retrying with a new key. - A retry while the first request is still running gets 409 `idempotency_request_in_progress`. A request still running after 5 minutes is treated as failed: a retry gets 409 `idempotency_outcome_unknown`. - The same key with a different request (method, path, query or body) gets 409 `idempotency_key_reused`. A write without the header gets 400 `idempotency_key_required`. Every response carries `X-Request-Id`. Errors share one shape, `{code, message, requestId, details?}`. Money is integer cents plus a currency code and dates are ISO-8601.
4
+ #The Growwer customer API. Authenticate every call with an API key created on your profile page, sent as `Authorization: Bearer <key>`. A read key can call every GET operation; writes need a read and write key and an `Idempotency-Key` header. Idempotency: use a new `Idempotency-Key` (1 to 255 printable ASCII characters without spaces) for each operation and reuse it only to retry that same operation. Keys belong to your account, not to one API key. - A successful write is stored for 30 days: a retry with the same key and the same request replays its response with `Idempotent-Replayed: true` and does nothing again. - A refused write (4xx) has no effect and releases its key: once you fix the cause, retry with the same key and the write runs. - A failed write (5xx) may have taken effect, so it is never run again under its key: a retry gets 409 `idempotency_outcome_unknown`. Check whether it took effect before retrying with a new key. - A retry while the first request is still running gets 409 `idempotency_request_in_progress`. A request still running after 5 minutes is treated as failed: a retry gets 409 `idempotency_outcome_unknown`. - The same key with a different request (method, path, query or body) gets 409 `idempotency_key_reused`. A write without the header gets 400 `idempotency_key_required`. Test mode: a test key (`gw_sk_test_` plus 43 characters) works on your account's test data alone, apart from the real catalogue: test projects, orders and files, and a test wallet that starts at 1,000.00 EUR. Every response to a test key carries `Growwer-Mode: test`, and an id of the other mode answers 404 as a missing object would. - A test order is validated and debited from the test wallet as a live one is. A simulated seller accepts it a minute later and delivers it two minutes after that; you approve the delivery or request an update. - The Test helpers top the test wallet up, move a test order on at once and reset your test data. A live key on them gets 403 `test_mode_only`. - A test key on the seller and managed service operations, on a project's catalogue writes and on media requests gets 403 `not_available_in_test_mode`. - Idempotency keys are scoped per mode: the same `Idempotency-Key` sent with a live and a test key never replays the other mode's response. Webhooks: a subscription receives the events of its mode, signed as Standard Webhooks. A subscription created with a live key gets the events of your orders and your wallet; one created with a test key gets those of your test orders and test wallet, with `mode: test`, and never a live event. `x-webhooks` lists every event Growwer POSTs and its payload; the WebhookEvent schema describes the headers, the signature and the retries. Every response carries `X-Request-Id`. Errors share one shape, `{code, message, requestId, details?}`. Money is integer cents plus a currency code and dates are ISO-8601.
5
5
 
6
6
  The version of the OpenAPI document: 1
7
7
  Contact: support@growwer.com
@@ -1,7 +1,7 @@
1
1
  =begin
2
2
  #Growwer API
3
3
 
4
- #The Growwer customer API. Authenticate every call with an API key created on your profile page, sent as `Authorization: Bearer <key>`. A read key can call every GET operation; writes need a read and write key and an `Idempotency-Key` header. Idempotency: use a new `Idempotency-Key` (1 to 255 printable ASCII characters without spaces) for each operation and reuse it only to retry that same operation. Keys belong to your account, not to one API key. - A successful write is stored for 30 days: a retry with the same key and the same request replays its response with `Idempotent-Replayed: true` and does nothing again. - A refused write (4xx) has no effect and releases its key: once you fix the cause, retry with the same key and the write runs. - A failed write (5xx) may have taken effect, so it is never run again under its key: a retry gets 409 `idempotency_outcome_unknown`. Check whether it took effect before retrying with a new key. - A retry while the first request is still running gets 409 `idempotency_request_in_progress`. A request still running after 5 minutes is treated as failed: a retry gets 409 `idempotency_outcome_unknown`. - The same key with a different request (method, path, query or body) gets 409 `idempotency_key_reused`. A write without the header gets 400 `idempotency_key_required`. Every response carries `X-Request-Id`. Errors share one shape, `{code, message, requestId, details?}`. Money is integer cents plus a currency code and dates are ISO-8601.
4
+ #The Growwer customer API. Authenticate every call with an API key created on your profile page, sent as `Authorization: Bearer <key>`. A read key can call every GET operation; writes need a read and write key and an `Idempotency-Key` header. Idempotency: use a new `Idempotency-Key` (1 to 255 printable ASCII characters without spaces) for each operation and reuse it only to retry that same operation. Keys belong to your account, not to one API key. - A successful write is stored for 30 days: a retry with the same key and the same request replays its response with `Idempotent-Replayed: true` and does nothing again. - A refused write (4xx) has no effect and releases its key: once you fix the cause, retry with the same key and the write runs. - A failed write (5xx) may have taken effect, so it is never run again under its key: a retry gets 409 `idempotency_outcome_unknown`. Check whether it took effect before retrying with a new key. - A retry while the first request is still running gets 409 `idempotency_request_in_progress`. A request still running after 5 minutes is treated as failed: a retry gets 409 `idempotency_outcome_unknown`. - The same key with a different request (method, path, query or body) gets 409 `idempotency_key_reused`. A write without the header gets 400 `idempotency_key_required`. Test mode: a test key (`gw_sk_test_` plus 43 characters) works on your account's test data alone, apart from the real catalogue: test projects, orders and files, and a test wallet that starts at 1,000.00 EUR. Every response to a test key carries `Growwer-Mode: test`, and an id of the other mode answers 404 as a missing object would. - A test order is validated and debited from the test wallet as a live one is. A simulated seller accepts it a minute later and delivers it two minutes after that; you approve the delivery or request an update. - The Test helpers top the test wallet up, move a test order on at once and reset your test data. A live key on them gets 403 `test_mode_only`. - A test key on the seller and managed service operations, on a project's catalogue writes and on media requests gets 403 `not_available_in_test_mode`. - Idempotency keys are scoped per mode: the same `Idempotency-Key` sent with a live and a test key never replays the other mode's response. Webhooks: a subscription receives the events of its mode, signed as Standard Webhooks. A subscription created with a live key gets the events of your orders and your wallet; one created with a test key gets those of your test orders and test wallet, with `mode: test`, and never a live event. `x-webhooks` lists every event Growwer POSTs and its payload; the WebhookEvent schema describes the headers, the signature and the retries. Every response carries `X-Request-Id`. Errors share one shape, `{code, message, requestId, details?}`. Money is integer cents plus a currency code and dates are ISO-8601.
5
5
 
6
6
  The version of the OpenAPI document: 1
7
7
  Contact: support@growwer.com
@@ -1,7 +1,7 @@
1
1
  =begin
2
2
  #Growwer API
3
3
 
4
- #The Growwer customer API. Authenticate every call with an API key created on your profile page, sent as `Authorization: Bearer <key>`. A read key can call every GET operation; writes need a read and write key and an `Idempotency-Key` header. Idempotency: use a new `Idempotency-Key` (1 to 255 printable ASCII characters without spaces) for each operation and reuse it only to retry that same operation. Keys belong to your account, not to one API key. - A successful write is stored for 30 days: a retry with the same key and the same request replays its response with `Idempotent-Replayed: true` and does nothing again. - A refused write (4xx) has no effect and releases its key: once you fix the cause, retry with the same key and the write runs. - A failed write (5xx) may have taken effect, so it is never run again under its key: a retry gets 409 `idempotency_outcome_unknown`. Check whether it took effect before retrying with a new key. - A retry while the first request is still running gets 409 `idempotency_request_in_progress`. A request still running after 5 minutes is treated as failed: a retry gets 409 `idempotency_outcome_unknown`. - The same key with a different request (method, path, query or body) gets 409 `idempotency_key_reused`. A write without the header gets 400 `idempotency_key_required`. Every response carries `X-Request-Id`. Errors share one shape, `{code, message, requestId, details?}`. Money is integer cents plus a currency code and dates are ISO-8601.
4
+ #The Growwer customer API. Authenticate every call with an API key created on your profile page, sent as `Authorization: Bearer <key>`. A read key can call every GET operation; writes need a read and write key and an `Idempotency-Key` header. Idempotency: use a new `Idempotency-Key` (1 to 255 printable ASCII characters without spaces) for each operation and reuse it only to retry that same operation. Keys belong to your account, not to one API key. - A successful write is stored for 30 days: a retry with the same key and the same request replays its response with `Idempotent-Replayed: true` and does nothing again. - A refused write (4xx) has no effect and releases its key: once you fix the cause, retry with the same key and the write runs. - A failed write (5xx) may have taken effect, so it is never run again under its key: a retry gets 409 `idempotency_outcome_unknown`. Check whether it took effect before retrying with a new key. - A retry while the first request is still running gets 409 `idempotency_request_in_progress`. A request still running after 5 minutes is treated as failed: a retry gets 409 `idempotency_outcome_unknown`. - The same key with a different request (method, path, query or body) gets 409 `idempotency_key_reused`. A write without the header gets 400 `idempotency_key_required`. Test mode: a test key (`gw_sk_test_` plus 43 characters) works on your account's test data alone, apart from the real catalogue: test projects, orders and files, and a test wallet that starts at 1,000.00 EUR. Every response to a test key carries `Growwer-Mode: test`, and an id of the other mode answers 404 as a missing object would. - A test order is validated and debited from the test wallet as a live one is. A simulated seller accepts it a minute later and delivers it two minutes after that; you approve the delivery or request an update. - The Test helpers top the test wallet up, move a test order on at once and reset your test data. A live key on them gets 403 `test_mode_only`. - A test key on the seller and managed service operations, on a project's catalogue writes and on media requests gets 403 `not_available_in_test_mode`. - Idempotency keys are scoped per mode: the same `Idempotency-Key` sent with a live and a test key never replays the other mode's response. Webhooks: a subscription receives the events of its mode, signed as Standard Webhooks. A subscription created with a live key gets the events of your orders and your wallet; one created with a test key gets those of your test orders and test wallet, with `mode: test`, and never a live event. `x-webhooks` lists every event Growwer POSTs and its payload; the WebhookEvent schema describes the headers, the signature and the retries. Every response carries `X-Request-Id`. Errors share one shape, `{code, message, requestId, details?}`. Money is integer cents plus a currency code and dates are ISO-8601.
5
5
 
6
6
  The version of the OpenAPI document: 1
7
7
  Contact: support@growwer.com
@@ -1,7 +1,7 @@
1
1
  =begin
2
2
  #Growwer API
3
3
 
4
- #The Growwer customer API. Authenticate every call with an API key created on your profile page, sent as `Authorization: Bearer <key>`. A read key can call every GET operation; writes need a read and write key and an `Idempotency-Key` header. Idempotency: use a new `Idempotency-Key` (1 to 255 printable ASCII characters without spaces) for each operation and reuse it only to retry that same operation. Keys belong to your account, not to one API key. - A successful write is stored for 30 days: a retry with the same key and the same request replays its response with `Idempotent-Replayed: true` and does nothing again. - A refused write (4xx) has no effect and releases its key: once you fix the cause, retry with the same key and the write runs. - A failed write (5xx) may have taken effect, so it is never run again under its key: a retry gets 409 `idempotency_outcome_unknown`. Check whether it took effect before retrying with a new key. - A retry while the first request is still running gets 409 `idempotency_request_in_progress`. A request still running after 5 minutes is treated as failed: a retry gets 409 `idempotency_outcome_unknown`. - The same key with a different request (method, path, query or body) gets 409 `idempotency_key_reused`. A write without the header gets 400 `idempotency_key_required`. Every response carries `X-Request-Id`. Errors share one shape, `{code, message, requestId, details?}`. Money is integer cents plus a currency code and dates are ISO-8601.
4
+ #The Growwer customer API. Authenticate every call with an API key created on your profile page, sent as `Authorization: Bearer <key>`. A read key can call every GET operation; writes need a read and write key and an `Idempotency-Key` header. Idempotency: use a new `Idempotency-Key` (1 to 255 printable ASCII characters without spaces) for each operation and reuse it only to retry that same operation. Keys belong to your account, not to one API key. - A successful write is stored for 30 days: a retry with the same key and the same request replays its response with `Idempotent-Replayed: true` and does nothing again. - A refused write (4xx) has no effect and releases its key: once you fix the cause, retry with the same key and the write runs. - A failed write (5xx) may have taken effect, so it is never run again under its key: a retry gets 409 `idempotency_outcome_unknown`. Check whether it took effect before retrying with a new key. - A retry while the first request is still running gets 409 `idempotency_request_in_progress`. A request still running after 5 minutes is treated as failed: a retry gets 409 `idempotency_outcome_unknown`. - The same key with a different request (method, path, query or body) gets 409 `idempotency_key_reused`. A write without the header gets 400 `idempotency_key_required`. Test mode: a test key (`gw_sk_test_` plus 43 characters) works on your account's test data alone, apart from the real catalogue: test projects, orders and files, and a test wallet that starts at 1,000.00 EUR. Every response to a test key carries `Growwer-Mode: test`, and an id of the other mode answers 404 as a missing object would. - A test order is validated and debited from the test wallet as a live one is. A simulated seller accepts it a minute later and delivers it two minutes after that; you approve the delivery or request an update. - The Test helpers top the test wallet up, move a test order on at once and reset your test data. A live key on them gets 403 `test_mode_only`. - A test key on the seller and managed service operations, on a project's catalogue writes and on media requests gets 403 `not_available_in_test_mode`. - Idempotency keys are scoped per mode: the same `Idempotency-Key` sent with a live and a test key never replays the other mode's response. Webhooks: a subscription receives the events of its mode, signed as Standard Webhooks. A subscription created with a live key gets the events of your orders and your wallet; one created with a test key gets those of your test orders and test wallet, with `mode: test`, and never a live event. `x-webhooks` lists every event Growwer POSTs and its payload; the WebhookEvent schema describes the headers, the signature and the retries. Every response carries `X-Request-Id`. Errors share one shape, `{code, message, requestId, details?}`. Money is integer cents plus a currency code and dates are ISO-8601.
5
5
 
6
6
  The version of the OpenAPI document: 1
7
7
  Contact: support@growwer.com
@@ -1,7 +1,7 @@
1
1
  =begin
2
2
  #Growwer API
3
3
 
4
- #The Growwer customer API. Authenticate every call with an API key created on your profile page, sent as `Authorization: Bearer <key>`. A read key can call every GET operation; writes need a read and write key and an `Idempotency-Key` header. Idempotency: use a new `Idempotency-Key` (1 to 255 printable ASCII characters without spaces) for each operation and reuse it only to retry that same operation. Keys belong to your account, not to one API key. - A successful write is stored for 30 days: a retry with the same key and the same request replays its response with `Idempotent-Replayed: true` and does nothing again. - A refused write (4xx) has no effect and releases its key: once you fix the cause, retry with the same key and the write runs. - A failed write (5xx) may have taken effect, so it is never run again under its key: a retry gets 409 `idempotency_outcome_unknown`. Check whether it took effect before retrying with a new key. - A retry while the first request is still running gets 409 `idempotency_request_in_progress`. A request still running after 5 minutes is treated as failed: a retry gets 409 `idempotency_outcome_unknown`. - The same key with a different request (method, path, query or body) gets 409 `idempotency_key_reused`. A write without the header gets 400 `idempotency_key_required`. Every response carries `X-Request-Id`. Errors share one shape, `{code, message, requestId, details?}`. Money is integer cents plus a currency code and dates are ISO-8601.
4
+ #The Growwer customer API. Authenticate every call with an API key created on your profile page, sent as `Authorization: Bearer <key>`. A read key can call every GET operation; writes need a read and write key and an `Idempotency-Key` header. Idempotency: use a new `Idempotency-Key` (1 to 255 printable ASCII characters without spaces) for each operation and reuse it only to retry that same operation. Keys belong to your account, not to one API key. - A successful write is stored for 30 days: a retry with the same key and the same request replays its response with `Idempotent-Replayed: true` and does nothing again. - A refused write (4xx) has no effect and releases its key: once you fix the cause, retry with the same key and the write runs. - A failed write (5xx) may have taken effect, so it is never run again under its key: a retry gets 409 `idempotency_outcome_unknown`. Check whether it took effect before retrying with a new key. - A retry while the first request is still running gets 409 `idempotency_request_in_progress`. A request still running after 5 minutes is treated as failed: a retry gets 409 `idempotency_outcome_unknown`. - The same key with a different request (method, path, query or body) gets 409 `idempotency_key_reused`. A write without the header gets 400 `idempotency_key_required`. Test mode: a test key (`gw_sk_test_` plus 43 characters) works on your account's test data alone, apart from the real catalogue: test projects, orders and files, and a test wallet that starts at 1,000.00 EUR. Every response to a test key carries `Growwer-Mode: test`, and an id of the other mode answers 404 as a missing object would. - A test order is validated and debited from the test wallet as a live one is. A simulated seller accepts it a minute later and delivers it two minutes after that; you approve the delivery or request an update. - The Test helpers top the test wallet up, move a test order on at once and reset your test data. A live key on them gets 403 `test_mode_only`. - A test key on the seller and managed service operations, on a project's catalogue writes and on media requests gets 403 `not_available_in_test_mode`. - Idempotency keys are scoped per mode: the same `Idempotency-Key` sent with a live and a test key never replays the other mode's response. Webhooks: a subscription receives the events of its mode, signed as Standard Webhooks. A subscription created with a live key gets the events of your orders and your wallet; one created with a test key gets those of your test orders and test wallet, with `mode: test`, and never a live event. `x-webhooks` lists every event Growwer POSTs and its payload; the WebhookEvent schema describes the headers, the signature and the retries. Every response carries `X-Request-Id`. Errors share one shape, `{code, message, requestId, details?}`. Money is integer cents plus a currency code and dates are ISO-8601.
5
5
 
6
6
  The version of the OpenAPI document: 1
7
7
  Contact: support@growwer.com
@@ -1,7 +1,7 @@
1
1
  =begin
2
2
  #Growwer API
3
3
 
4
- #The Growwer customer API. Authenticate every call with an API key created on your profile page, sent as `Authorization: Bearer <key>`. A read key can call every GET operation; writes need a read and write key and an `Idempotency-Key` header. Idempotency: use a new `Idempotency-Key` (1 to 255 printable ASCII characters without spaces) for each operation and reuse it only to retry that same operation. Keys belong to your account, not to one API key. - A successful write is stored for 30 days: a retry with the same key and the same request replays its response with `Idempotent-Replayed: true` and does nothing again. - A refused write (4xx) has no effect and releases its key: once you fix the cause, retry with the same key and the write runs. - A failed write (5xx) may have taken effect, so it is never run again under its key: a retry gets 409 `idempotency_outcome_unknown`. Check whether it took effect before retrying with a new key. - A retry while the first request is still running gets 409 `idempotency_request_in_progress`. A request still running after 5 minutes is treated as failed: a retry gets 409 `idempotency_outcome_unknown`. - The same key with a different request (method, path, query or body) gets 409 `idempotency_key_reused`. A write without the header gets 400 `idempotency_key_required`. Every response carries `X-Request-Id`. Errors share one shape, `{code, message, requestId, details?}`. Money is integer cents plus a currency code and dates are ISO-8601.
4
+ #The Growwer customer API. Authenticate every call with an API key created on your profile page, sent as `Authorization: Bearer <key>`. A read key can call every GET operation; writes need a read and write key and an `Idempotency-Key` header. Idempotency: use a new `Idempotency-Key` (1 to 255 printable ASCII characters without spaces) for each operation and reuse it only to retry that same operation. Keys belong to your account, not to one API key. - A successful write is stored for 30 days: a retry with the same key and the same request replays its response with `Idempotent-Replayed: true` and does nothing again. - A refused write (4xx) has no effect and releases its key: once you fix the cause, retry with the same key and the write runs. - A failed write (5xx) may have taken effect, so it is never run again under its key: a retry gets 409 `idempotency_outcome_unknown`. Check whether it took effect before retrying with a new key. - A retry while the first request is still running gets 409 `idempotency_request_in_progress`. A request still running after 5 minutes is treated as failed: a retry gets 409 `idempotency_outcome_unknown`. - The same key with a different request (method, path, query or body) gets 409 `idempotency_key_reused`. A write without the header gets 400 `idempotency_key_required`. Test mode: a test key (`gw_sk_test_` plus 43 characters) works on your account's test data alone, apart from the real catalogue: test projects, orders and files, and a test wallet that starts at 1,000.00 EUR. Every response to a test key carries `Growwer-Mode: test`, and an id of the other mode answers 404 as a missing object would. - A test order is validated and debited from the test wallet as a live one is. A simulated seller accepts it a minute later and delivers it two minutes after that; you approve the delivery or request an update. - The Test helpers top the test wallet up, move a test order on at once and reset your test data. A live key on them gets 403 `test_mode_only`. - A test key on the seller and managed service operations, on a project's catalogue writes and on media requests gets 403 `not_available_in_test_mode`. - Idempotency keys are scoped per mode: the same `Idempotency-Key` sent with a live and a test key never replays the other mode's response. Webhooks: a subscription receives the events of its mode, signed as Standard Webhooks. A subscription created with a live key gets the events of your orders and your wallet; one created with a test key gets those of your test orders and test wallet, with `mode: test`, and never a live event. `x-webhooks` lists every event Growwer POSTs and its payload; the WebhookEvent schema describes the headers, the signature and the retries. Every response carries `X-Request-Id`. Errors share one shape, `{code, message, requestId, details?}`. Money is integer cents plus a currency code and dates are ISO-8601.
5
5
 
6
6
  The version of the OpenAPI document: 1
7
7
  Contact: support@growwer.com
@@ -1,7 +1,7 @@
1
1
  =begin
2
2
  #Growwer API
3
3
 
4
- #The Growwer customer API. Authenticate every call with an API key created on your profile page, sent as `Authorization: Bearer <key>`. A read key can call every GET operation; writes need a read and write key and an `Idempotency-Key` header. Idempotency: use a new `Idempotency-Key` (1 to 255 printable ASCII characters without spaces) for each operation and reuse it only to retry that same operation. Keys belong to your account, not to one API key. - A successful write is stored for 30 days: a retry with the same key and the same request replays its response with `Idempotent-Replayed: true` and does nothing again. - A refused write (4xx) has no effect and releases its key: once you fix the cause, retry with the same key and the write runs. - A failed write (5xx) may have taken effect, so it is never run again under its key: a retry gets 409 `idempotency_outcome_unknown`. Check whether it took effect before retrying with a new key. - A retry while the first request is still running gets 409 `idempotency_request_in_progress`. A request still running after 5 minutes is treated as failed: a retry gets 409 `idempotency_outcome_unknown`. - The same key with a different request (method, path, query or body) gets 409 `idempotency_key_reused`. A write without the header gets 400 `idempotency_key_required`. Every response carries `X-Request-Id`. Errors share one shape, `{code, message, requestId, details?}`. Money is integer cents plus a currency code and dates are ISO-8601.
4
+ #The Growwer customer API. Authenticate every call with an API key created on your profile page, sent as `Authorization: Bearer <key>`. A read key can call every GET operation; writes need a read and write key and an `Idempotency-Key` header. Idempotency: use a new `Idempotency-Key` (1 to 255 printable ASCII characters without spaces) for each operation and reuse it only to retry that same operation. Keys belong to your account, not to one API key. - A successful write is stored for 30 days: a retry with the same key and the same request replays its response with `Idempotent-Replayed: true` and does nothing again. - A refused write (4xx) has no effect and releases its key: once you fix the cause, retry with the same key and the write runs. - A failed write (5xx) may have taken effect, so it is never run again under its key: a retry gets 409 `idempotency_outcome_unknown`. Check whether it took effect before retrying with a new key. - A retry while the first request is still running gets 409 `idempotency_request_in_progress`. A request still running after 5 minutes is treated as failed: a retry gets 409 `idempotency_outcome_unknown`. - The same key with a different request (method, path, query or body) gets 409 `idempotency_key_reused`. A write without the header gets 400 `idempotency_key_required`. Test mode: a test key (`gw_sk_test_` plus 43 characters) works on your account's test data alone, apart from the real catalogue: test projects, orders and files, and a test wallet that starts at 1,000.00 EUR. Every response to a test key carries `Growwer-Mode: test`, and an id of the other mode answers 404 as a missing object would. - A test order is validated and debited from the test wallet as a live one is. A simulated seller accepts it a minute later and delivers it two minutes after that; you approve the delivery or request an update. - The Test helpers top the test wallet up, move a test order on at once and reset your test data. A live key on them gets 403 `test_mode_only`. - A test key on the seller and managed service operations, on a project's catalogue writes and on media requests gets 403 `not_available_in_test_mode`. - Idempotency keys are scoped per mode: the same `Idempotency-Key` sent with a live and a test key never replays the other mode's response. Webhooks: a subscription receives the events of its mode, signed as Standard Webhooks. A subscription created with a live key gets the events of your orders and your wallet; one created with a test key gets those of your test orders and test wallet, with `mode: test`, and never a live event. `x-webhooks` lists every event Growwer POSTs and its payload; the WebhookEvent schema describes the headers, the signature and the retries. Every response carries `X-Request-Id`. Errors share one shape, `{code, message, requestId, details?}`. Money is integer cents plus a currency code and dates are ISO-8601.
5
5
 
6
6
  The version of the OpenAPI document: 1
7
7
  Contact: support@growwer.com
@@ -0,0 +1,245 @@
1
+ =begin
2
+ #Growwer API
3
+
4
+ #The Growwer customer API. Authenticate every call with an API key created on your profile page, sent as `Authorization: Bearer <key>`. A read key can call every GET operation; writes need a read and write key and an `Idempotency-Key` header. Idempotency: use a new `Idempotency-Key` (1 to 255 printable ASCII characters without spaces) for each operation and reuse it only to retry that same operation. Keys belong to your account, not to one API key. - A successful write is stored for 30 days: a retry with the same key and the same request replays its response with `Idempotent-Replayed: true` and does nothing again. - A refused write (4xx) has no effect and releases its key: once you fix the cause, retry with the same key and the write runs. - A failed write (5xx) may have taken effect, so it is never run again under its key: a retry gets 409 `idempotency_outcome_unknown`. Check whether it took effect before retrying with a new key. - A retry while the first request is still running gets 409 `idempotency_request_in_progress`. A request still running after 5 minutes is treated as failed: a retry gets 409 `idempotency_outcome_unknown`. - The same key with a different request (method, path, query or body) gets 409 `idempotency_key_reused`. A write without the header gets 400 `idempotency_key_required`. Test mode: a test key (`gw_sk_test_` plus 43 characters) works on your account's test data alone, apart from the real catalogue: test projects, orders and files, and a test wallet that starts at 1,000.00 EUR. Every response to a test key carries `Growwer-Mode: test`, and an id of the other mode answers 404 as a missing object would. - A test order is validated and debited from the test wallet as a live one is. A simulated seller accepts it a minute later and delivers it two minutes after that; you approve the delivery or request an update. - The Test helpers top the test wallet up, move a test order on at once and reset your test data. A live key on them gets 403 `test_mode_only`. - A test key on the seller and managed service operations, on a project's catalogue writes and on media requests gets 403 `not_available_in_test_mode`. - Idempotency keys are scoped per mode: the same `Idempotency-Key` sent with a live and a test key never replays the other mode's response. Webhooks: a subscription receives the events of its mode, signed as Standard Webhooks. A subscription created with a live key gets the events of your orders and your wallet; one created with a test key gets those of your test orders and test wallet, with `mode: test`, and never a live event. `x-webhooks` lists every event Growwer POSTs and its payload; the WebhookEvent schema describes the headers, the signature and the retries. Every response carries `X-Request-Id`. Errors share one shape, `{code, message, requestId, details?}`. Money is integer cents plus a currency code and dates are ISO-8601.
5
+
6
+ The version of the OpenAPI document: 1
7
+ Contact: support@growwer.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.24.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module Growwer
17
+ class UpdateWebhookRequest < ApiModelBase
18
+ # An HTTPS URL of at most 2048 characters, without a backslash or credentials. Its host is an IP address or a domain name of two labels or more, such as hooks.example.com, with one trailing dot allowed; a single-label host such as localhost is refused (`validation_failed` on `url`). The host is checked, and resolved at each delivery, in lower case and with a Unicode name in punycode, the form a delivery connects to.
19
+ attr_accessor :url
20
+
21
+ # The events to send, at least one; replaces the list.
22
+ attr_accessor :events
23
+
24
+ # With `balance.low`: the available buyer balance below which the event fires, in EUR. Null removes it.
25
+ attr_accessor :low_balance_threshold
26
+
27
+ # A note of yours, at most 255 characters. Null removes it.
28
+ attr_accessor :description
29
+
30
+ # Whether the subscription gets events.
31
+ attr_accessor :enabled
32
+
33
+ # Attribute mapping from ruby-style variable name to JSON key.
34
+ def self.attribute_map
35
+ {
36
+ :'url' => :'url',
37
+ :'events' => :'events',
38
+ :'low_balance_threshold' => :'lowBalanceThreshold',
39
+ :'description' => :'description',
40
+ :'enabled' => :'enabled'
41
+ }
42
+ end
43
+
44
+ # Returns attribute mapping this model knows about
45
+ def self.acceptable_attribute_map
46
+ attribute_map
47
+ end
48
+
49
+ # Returns all the JSON keys this model knows about
50
+ def self.acceptable_attributes
51
+ acceptable_attribute_map.values
52
+ end
53
+
54
+ # Attribute type mapping.
55
+ def self.openapi_types
56
+ {
57
+ :'url' => :'String',
58
+ :'events' => :'Array<WebhookEventType>',
59
+ :'low_balance_threshold' => :'MoneyOrNull',
60
+ :'description' => :'String',
61
+ :'enabled' => :'Boolean'
62
+ }
63
+ end
64
+
65
+ # List of attributes with nullable: true
66
+ def self.openapi_nullable
67
+ Set.new([
68
+ :'low_balance_threshold',
69
+ :'description',
70
+ ])
71
+ end
72
+
73
+ # Initializes the object
74
+ # @param [Hash] attributes Model attributes in the form of hash
75
+ def initialize(attributes = {})
76
+ if (!attributes.is_a?(Hash))
77
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Growwer::UpdateWebhookRequest` initialize method"
78
+ end
79
+
80
+ # check to see if the attribute exists and convert string to symbol for hash key
81
+ acceptable_attribute_map = self.class.acceptable_attribute_map
82
+ attributes = attributes.each_with_object({}) { |(k, v), h|
83
+ if (!acceptable_attribute_map.key?(k.to_sym))
84
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Growwer::UpdateWebhookRequest`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
85
+ end
86
+ h[k.to_sym] = v
87
+ }
88
+
89
+ if attributes.key?(:'url')
90
+ self.url = attributes[:'url']
91
+ end
92
+
93
+ if attributes.key?(:'events')
94
+ if (value = attributes[:'events']).is_a?(Array)
95
+ self.events = value
96
+ end
97
+ end
98
+
99
+ if attributes.key?(:'low_balance_threshold')
100
+ self.low_balance_threshold = attributes[:'low_balance_threshold']
101
+ end
102
+
103
+ if attributes.key?(:'description')
104
+ self.description = attributes[:'description']
105
+ end
106
+
107
+ if attributes.key?(:'enabled')
108
+ self.enabled = attributes[:'enabled']
109
+ end
110
+ end
111
+
112
+ # Show invalid properties with the reasons. Usually used together with valid?
113
+ # @return Array for valid properties with the reasons
114
+ def list_invalid_properties
115
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
116
+ invalid_properties = Array.new
117
+ if !@url.nil? && @url.to_s.length > 2048
118
+ invalid_properties.push('invalid value for "url", the character length must be smaller than or equal to 2048.')
119
+ end
120
+
121
+ if !@events.nil? && @events.length < 1
122
+ invalid_properties.push('invalid value for "events", number of items must be greater than or equal to 1.')
123
+ end
124
+
125
+ if !@description.nil? && @description.to_s.length > 255
126
+ invalid_properties.push('invalid value for "description", the character length must be smaller than or equal to 255.')
127
+ end
128
+
129
+ invalid_properties
130
+ end
131
+
132
+ # Check to see if the all the properties in the model are valid
133
+ # @return true if the model is valid
134
+ def valid?
135
+ warn '[DEPRECATED] the `valid?` method is obsolete'
136
+ return false if !@url.nil? && @url.to_s.length > 2048
137
+ return false if !@events.nil? && @events.length < 1
138
+ return false if !@description.nil? && @description.to_s.length > 255
139
+ true
140
+ end
141
+
142
+ # Custom attribute writer method with validation
143
+ # @param [Object] url Value to be assigned
144
+ def url=(url)
145
+ if url.nil?
146
+ fail ArgumentError, 'url cannot be nil'
147
+ end
148
+
149
+ if url.to_s.length > 2048
150
+ fail ArgumentError, 'invalid value for "url", the character length must be smaller than or equal to 2048.'
151
+ end
152
+
153
+ @url = url
154
+ end
155
+
156
+ # Custom attribute writer method with validation
157
+ # @param [Object] events Value to be assigned
158
+ def events=(events)
159
+ if events.nil?
160
+ fail ArgumentError, 'events cannot be nil'
161
+ end
162
+
163
+ if events.length < 1
164
+ fail ArgumentError, 'invalid value for "events", number of items must be greater than or equal to 1.'
165
+ end
166
+
167
+ @events = events
168
+ end
169
+
170
+ # Custom attribute writer method with validation
171
+ # @param [Object] description Value to be assigned
172
+ def description=(description)
173
+ if !description.nil? && description.to_s.length > 255
174
+ fail ArgumentError, 'invalid value for "description", the character length must be smaller than or equal to 255.'
175
+ end
176
+
177
+ @description = description
178
+ end
179
+
180
+ # Checks equality by comparing each attribute.
181
+ # @param [Object] Object to be compared
182
+ def ==(o)
183
+ return true if self.equal?(o)
184
+ self.class == o.class &&
185
+ url == o.url &&
186
+ events == o.events &&
187
+ low_balance_threshold == o.low_balance_threshold &&
188
+ description == o.description &&
189
+ enabled == o.enabled
190
+ end
191
+
192
+ # @see the `==` method
193
+ # @param [Object] Object to be compared
194
+ def eql?(o)
195
+ self == o
196
+ end
197
+
198
+ # Calculates hash code according to all attributes.
199
+ # @return [Integer] Hash code
200
+ def hash
201
+ [url, events, low_balance_threshold, description, enabled].hash
202
+ end
203
+
204
+ # Builds the object from hash
205
+ # @param [Hash] attributes Model attributes in the form of hash
206
+ # @return [Object] Returns the model itself
207
+ def self.build_from_hash(attributes)
208
+ return nil unless attributes.is_a?(Hash)
209
+ attributes = attributes.transform_keys(&:to_sym)
210
+ transformed_hash = {}
211
+ openapi_types.each_pair do |key, type|
212
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
213
+ transformed_hash["#{key}"] = nil
214
+ elsif type =~ /\AArray<(.*)>/i
215
+ # check to ensure the input is an array given that the attribute
216
+ # is documented as an array but the input is not
217
+ if attributes[attribute_map[key]].is_a?(Array)
218
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
219
+ end
220
+ elsif !attributes[attribute_map[key]].nil?
221
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
222
+ end
223
+ end
224
+ new(transformed_hash)
225
+ end
226
+
227
+ # Returns the object in the form of hash
228
+ # @return [Hash] Returns the object in the form of hash
229
+ def to_hash
230
+ hash = {}
231
+ self.class.attribute_map.each_pair do |attr, param|
232
+ value = self.send(attr)
233
+ if value.nil?
234
+ is_nullable = self.class.openapi_nullable.include?(attr)
235
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
236
+ end
237
+
238
+ hash[param] = _to_hash(value)
239
+ end
240
+ hash
241
+ end
242
+
243
+ end
244
+
245
+ end
@@ -1,7 +1,7 @@
1
1
  =begin
2
2
  #Growwer API
3
3
 
4
- #The Growwer customer API. Authenticate every call with an API key created on your profile page, sent as `Authorization: Bearer <key>`. A read key can call every GET operation; writes need a read and write key and an `Idempotency-Key` header. Idempotency: use a new `Idempotency-Key` (1 to 255 printable ASCII characters without spaces) for each operation and reuse it only to retry that same operation. Keys belong to your account, not to one API key. - A successful write is stored for 30 days: a retry with the same key and the same request replays its response with `Idempotent-Replayed: true` and does nothing again. - A refused write (4xx) has no effect and releases its key: once you fix the cause, retry with the same key and the write runs. - A failed write (5xx) may have taken effect, so it is never run again under its key: a retry gets 409 `idempotency_outcome_unknown`. Check whether it took effect before retrying with a new key. - A retry while the first request is still running gets 409 `idempotency_request_in_progress`. A request still running after 5 minutes is treated as failed: a retry gets 409 `idempotency_outcome_unknown`. - The same key with a different request (method, path, query or body) gets 409 `idempotency_key_reused`. A write without the header gets 400 `idempotency_key_required`. Every response carries `X-Request-Id`. Errors share one shape, `{code, message, requestId, details?}`. Money is integer cents plus a currency code and dates are ISO-8601.
4
+ #The Growwer customer API. Authenticate every call with an API key created on your profile page, sent as `Authorization: Bearer <key>`. A read key can call every GET operation; writes need a read and write key and an `Idempotency-Key` header. Idempotency: use a new `Idempotency-Key` (1 to 255 printable ASCII characters without spaces) for each operation and reuse it only to retry that same operation. Keys belong to your account, not to one API key. - A successful write is stored for 30 days: a retry with the same key and the same request replays its response with `Idempotent-Replayed: true` and does nothing again. - A refused write (4xx) has no effect and releases its key: once you fix the cause, retry with the same key and the write runs. - A failed write (5xx) may have taken effect, so it is never run again under its key: a retry gets 409 `idempotency_outcome_unknown`. Check whether it took effect before retrying with a new key. - A retry while the first request is still running gets 409 `idempotency_request_in_progress`. A request still running after 5 minutes is treated as failed: a retry gets 409 `idempotency_outcome_unknown`. - The same key with a different request (method, path, query or body) gets 409 `idempotency_key_reused`. A write without the header gets 400 `idempotency_key_required`. Test mode: a test key (`gw_sk_test_` plus 43 characters) works on your account's test data alone, apart from the real catalogue: test projects, orders and files, and a test wallet that starts at 1,000.00 EUR. Every response to a test key carries `Growwer-Mode: test`, and an id of the other mode answers 404 as a missing object would. - A test order is validated and debited from the test wallet as a live one is. A simulated seller accepts it a minute later and delivers it two minutes after that; you approve the delivery or request an update. - The Test helpers top the test wallet up, move a test order on at once and reset your test data. A live key on them gets 403 `test_mode_only`. - A test key on the seller and managed service operations, on a project's catalogue writes and on media requests gets 403 `not_available_in_test_mode`. - Idempotency keys are scoped per mode: the same `Idempotency-Key` sent with a live and a test key never replays the other mode's response. Webhooks: a subscription receives the events of its mode, signed as Standard Webhooks. A subscription created with a live key gets the events of your orders and your wallet; one created with a test key gets those of your test orders and test wallet, with `mode: test`, and never a live event. `x-webhooks` lists every event Growwer POSTs and its payload; the WebhookEvent schema describes the headers, the signature and the retries. Every response carries `X-Request-Id`. Errors share one shape, `{code, message, requestId, details?}`. Money is integer cents plus a currency code and dates are ISO-8601.
5
5
 
6
6
  The version of the OpenAPI document: 1
7
7
  Contact: support@growwer.com