late-sdk 0.0.531 → 0.0.533

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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +16 -0
  3. data/docs/AdsApi.md +287 -0
  4. data/docs/CheckPhoneNumberPortability200ResponseResultsInner.md +5 -1
  5. data/docs/CreatePhoneNumberPortInRequest.md +4 -2
  6. data/docs/CreatePhoneNumberPortInRequestEndUser.md +8 -4
  7. data/docs/CreatePhoneNumberPortInRequestRequirementsInner.md +20 -0
  8. data/docs/CreateRfPrediction201Response.md +22 -0
  9. data/docs/CreateRfPredictionRequest.md +34 -0
  10. data/docs/CreateStandaloneAdRequest.md +4 -0
  11. data/docs/GetPhoneNumberPortInOrderRequirements200Response.md +20 -0
  12. data/docs/GetPhoneNumberPortInOrderRequirements200ResponseRequirementsInner.md +32 -0
  13. data/docs/GetPhoneNumberPortInRequirements200Response.md +24 -0
  14. data/docs/GetPhoneNumberPortInRequirements200ResponseFieldsInner.md +28 -0
  15. data/docs/PhoneNumbersApi.md +149 -5
  16. data/docs/ReserveRfPrediction201Response.md +20 -0
  17. data/docs/ReserveRfPredictionRequest.md +20 -0
  18. data/docs/RfPrediction.md +42 -0
  19. data/lib/zernio-sdk/api/ads_api.rb +294 -0
  20. data/lib/zernio-sdk/api/phone_numbers_api.rb +148 -10
  21. data/lib/zernio-sdk/models/check_phone_number_portability200_response_results_inner.rb +24 -2
  22. data/lib/zernio-sdk/models/create_phone_number_port_in_request.rb +36 -5
  23. data/lib/zernio-sdk/models/create_phone_number_port_in_request_end_user.rb +65 -23
  24. data/lib/zernio-sdk/models/create_phone_number_port_in_request_requirements_inner.rb +201 -0
  25. data/lib/zernio-sdk/models/create_rf_prediction201_response.rb +165 -0
  26. data/lib/zernio-sdk/models/create_rf_prediction_request.rb +323 -0
  27. data/lib/zernio-sdk/models/create_standalone_ad_request.rb +33 -1
  28. data/lib/zernio-sdk/models/get_phone_number_port_in_order_requirements200_response.rb +158 -0
  29. data/lib/zernio-sdk/models/get_phone_number_port_in_order_requirements200_response_requirements_inner.rb +247 -0
  30. data/lib/zernio-sdk/models/get_phone_number_port_in_requirements200_response.rb +177 -0
  31. data/lib/zernio-sdk/models/get_phone_number_port_in_requirements200_response_fields_inner.rb +231 -0
  32. data/lib/zernio-sdk/models/reserve_rf_prediction201_response.rb +156 -0
  33. data/lib/zernio-sdk/models/reserve_rf_prediction_request.rb +190 -0
  34. data/lib/zernio-sdk/models/rf_prediction.rb +273 -0
  35. data/lib/zernio-sdk/version.rb +1 -1
  36. data/lib/zernio-sdk.rb +10 -0
  37. data/openapi.yaml +283 -16
  38. data/spec/api/ads_api_spec.rb +52 -0
  39. data/spec/api/phone_numbers_api_spec.rb +28 -3
  40. data/spec/models/check_phone_number_portability200_response_results_inner_spec.rb +12 -0
  41. data/spec/models/create_phone_number_port_in_request_end_user_spec.rb +13 -1
  42. data/spec/models/create_phone_number_port_in_request_requirements_inner_spec.rb +42 -0
  43. data/spec/models/create_phone_number_port_in_request_spec.rb +6 -0
  44. data/spec/models/create_rf_prediction201_response_spec.rb +48 -0
  45. data/spec/models/create_rf_prediction_request_spec.rb +84 -0
  46. data/spec/models/create_standalone_ad_request_spec.rb +16 -0
  47. data/spec/models/get_phone_number_port_in_order_requirements200_response_requirements_inner_spec.rb +82 -0
  48. data/spec/models/get_phone_number_port_in_order_requirements200_response_spec.rb +42 -0
  49. data/spec/models/get_phone_number_port_in_requirements200_response_fields_inner_spec.rb +70 -0
  50. data/spec/models/get_phone_number_port_in_requirements200_response_spec.rb +54 -0
  51. data/spec/models/reserve_rf_prediction201_response_spec.rb +42 -0
  52. data/spec/models/reserve_rf_prediction_request_spec.rb +42 -0
  53. data/spec/models/rf_prediction_spec.rb +108 -0
  54. data/zernio-sdk-0.0.533.gem +0 -0
  55. metadata +42 -2
  56. data/zernio-sdk-0.0.531.gem +0 -0
@@ -305,6 +305,83 @@ module Zernio
305
305
  return data, status_code, headers
306
306
  end
307
307
 
308
+ # Cancel a Reach & Frequency reservation (Meta)
309
+ # Releases a RESERVATION's locked price and inventory. Unreserved predictions expire on their own.
310
+ # @param prediction_id [String]
311
+ # @param account_id [String]
312
+ # @param ad_account_id [String]
313
+ # @param [Hash] opts the optional parameters
314
+ # @return [nil]
315
+ def cancel_rf_reservation(prediction_id, account_id, ad_account_id, opts = {})
316
+ cancel_rf_reservation_with_http_info(prediction_id, account_id, ad_account_id, opts)
317
+ nil
318
+ end
319
+
320
+ # Cancel a Reach & Frequency reservation (Meta)
321
+ # Releases a RESERVATION's locked price and inventory. Unreserved predictions expire on their own.
322
+ # @param prediction_id [String]
323
+ # @param account_id [String]
324
+ # @param ad_account_id [String]
325
+ # @param [Hash] opts the optional parameters
326
+ # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
327
+ def cancel_rf_reservation_with_http_info(prediction_id, account_id, ad_account_id, opts = {})
328
+ if @api_client.config.debugging
329
+ @api_client.config.logger.debug 'Calling API: AdsApi.cancel_rf_reservation ...'
330
+ end
331
+ # verify the required parameter 'prediction_id' is set
332
+ if @api_client.config.client_side_validation && prediction_id.nil?
333
+ fail ArgumentError, "Missing the required parameter 'prediction_id' when calling AdsApi.cancel_rf_reservation"
334
+ end
335
+ # verify the required parameter 'account_id' is set
336
+ if @api_client.config.client_side_validation && account_id.nil?
337
+ fail ArgumentError, "Missing the required parameter 'account_id' when calling AdsApi.cancel_rf_reservation"
338
+ end
339
+ # verify the required parameter 'ad_account_id' is set
340
+ if @api_client.config.client_side_validation && ad_account_id.nil?
341
+ fail ArgumentError, "Missing the required parameter 'ad_account_id' when calling AdsApi.cancel_rf_reservation"
342
+ end
343
+ # resource path
344
+ local_var_path = '/v1/ads/rf-predictions/{predictionId}'.sub('{' + 'predictionId' + '}', CGI.escape(prediction_id.to_s))
345
+
346
+ # query parameters
347
+ query_params = opts[:query_params] || {}
348
+ query_params[:'accountId'] = account_id
349
+ query_params[:'adAccountId'] = ad_account_id
350
+
351
+ # header parameters
352
+ header_params = opts[:header_params] || {}
353
+ # HTTP header 'Accept' (if needed)
354
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
355
+
356
+ # form parameters
357
+ form_params = opts[:form_params] || {}
358
+
359
+ # http body (model)
360
+ post_body = opts[:debug_body]
361
+
362
+ # return_type
363
+ return_type = opts[:debug_return_type]
364
+
365
+ # auth_names
366
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
367
+
368
+ new_options = opts.merge(
369
+ :operation => :"AdsApi.cancel_rf_reservation",
370
+ :header_params => header_params,
371
+ :query_params => query_params,
372
+ :form_params => form_params,
373
+ :body => post_body,
374
+ :auth_names => auth_names,
375
+ :return_type => return_type
376
+ )
377
+
378
+ data, status_code, headers = @api_client.call_api(:DELETE, local_var_path, new_options)
379
+ if @api_client.config.debugging
380
+ @api_client.config.logger.debug "API called: AdsApi#cancel_rf_reservation\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
381
+ end
382
+ return data, status_code, headers
383
+ end
384
+
308
385
  # Submit an async insights report run (Meta)
309
386
  # Submits an asynchronous Meta insights report. Same query surface as GET /v1/ads/insights, but in the JSON body; Meta processes the report server-side, which is the right choice for long ranges or large accounts where the sync query is slow or rate-limited. Returns a `reportRunId` to poll via GET /v1/ads/insights/reports/{reportRunId}. Meta only.
310
387
  # @param create_ad_insights_report_request [CreateAdInsightsReportRequest]
@@ -719,6 +796,74 @@ module Zernio
719
796
  return data, status_code, headers
720
797
  end
721
798
 
799
+ # Create a Reach & Frequency prediction (Meta)
800
+ # Creates an R&F prediction — a QUOTE, nothing is bought and no ad entities are created. Provide a date range plus exactly one of `budgetAmount` (Meta predicts reach) or `reach` (Meta predicts the budget). The response carries the estimate and its allowed bounds (min/max budget and reach). Predictions expire on their own; to buy, reserve one via POST /v1/ads/rf-predictions/{predictionId}/reserve and pass the RESERVED id to POST /v1/ads/create with `buyingType: \"RESERVED\"`. Reservation campaigns reject automatic placements, so omitted `placements` default to Facebook feed (+ Instagram stream when a linked IG professional account resolves); Instagram placements require that IG account. Meta only.
801
+ # @param create_rf_prediction_request [CreateRfPredictionRequest]
802
+ # @param [Hash] opts the optional parameters
803
+ # @return [CreateRfPrediction201Response]
804
+ def create_rf_prediction(create_rf_prediction_request, opts = {})
805
+ data, _status_code, _headers = create_rf_prediction_with_http_info(create_rf_prediction_request, opts)
806
+ data
807
+ end
808
+
809
+ # Create a Reach &amp; Frequency prediction (Meta)
810
+ # Creates an R&amp;F prediction — a QUOTE, nothing is bought and no ad entities are created. Provide a date range plus exactly one of &#x60;budgetAmount&#x60; (Meta predicts reach) or &#x60;reach&#x60; (Meta predicts the budget). The response carries the estimate and its allowed bounds (min/max budget and reach). Predictions expire on their own; to buy, reserve one via POST /v1/ads/rf-predictions/{predictionId}/reserve and pass the RESERVED id to POST /v1/ads/create with &#x60;buyingType: \&quot;RESERVED\&quot;&#x60;. Reservation campaigns reject automatic placements, so omitted &#x60;placements&#x60; default to Facebook feed (+ Instagram stream when a linked IG professional account resolves); Instagram placements require that IG account. Meta only.
811
+ # @param create_rf_prediction_request [CreateRfPredictionRequest]
812
+ # @param [Hash] opts the optional parameters
813
+ # @return [Array<(CreateRfPrediction201Response, Integer, Hash)>] CreateRfPrediction201Response data, response status code and response headers
814
+ def create_rf_prediction_with_http_info(create_rf_prediction_request, opts = {})
815
+ if @api_client.config.debugging
816
+ @api_client.config.logger.debug 'Calling API: AdsApi.create_rf_prediction ...'
817
+ end
818
+ # verify the required parameter 'create_rf_prediction_request' is set
819
+ if @api_client.config.client_side_validation && create_rf_prediction_request.nil?
820
+ fail ArgumentError, "Missing the required parameter 'create_rf_prediction_request' when calling AdsApi.create_rf_prediction"
821
+ end
822
+ # resource path
823
+ local_var_path = '/v1/ads/rf-predictions'
824
+
825
+ # query parameters
826
+ query_params = opts[:query_params] || {}
827
+
828
+ # header parameters
829
+ header_params = opts[:header_params] || {}
830
+ # HTTP header 'Accept' (if needed)
831
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
832
+ # HTTP header 'Content-Type'
833
+ content_type = @api_client.select_header_content_type(['application/json'])
834
+ if !content_type.nil?
835
+ header_params['Content-Type'] = content_type
836
+ end
837
+
838
+ # form parameters
839
+ form_params = opts[:form_params] || {}
840
+
841
+ # http body (model)
842
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(create_rf_prediction_request)
843
+
844
+ # return_type
845
+ return_type = opts[:debug_return_type] || 'CreateRfPrediction201Response'
846
+
847
+ # auth_names
848
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
849
+
850
+ new_options = opts.merge(
851
+ :operation => :"AdsApi.create_rf_prediction",
852
+ :header_params => header_params,
853
+ :query_params => query_params,
854
+ :form_params => form_params,
855
+ :body => post_body,
856
+ :auth_names => auth_names,
857
+ :return_type => return_type
858
+ )
859
+
860
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
861
+ if @api_client.config.debugging
862
+ @api_client.config.logger.debug "API called: AdsApi#create_rf_prediction\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
863
+ end
864
+ return data, status_code, headers
865
+ end
866
+
722
867
  # Create standalone ad
723
868
  # Creates a paid ad with custom creative across Meta, Google Ads, Pinterest, TikTok, X/Twitter, and LinkedIn. Supports three mutually-exclusive request shapes selected by the body, a legacy single-creative shape (all platforms, default), a Meta-only multi-creative shape via the creatives array (one ad set with N ads sharing budget and targeting), and a Meta-only attach shape via adSetId (adds one new ad to an existing ad set). Per-platform required fields, budget minimums, and video-ad rules are documented on each property below. LinkedIn creates a Single Image or Single Video Ad backed by a Direct Sponsored Content \"dark post\" authored by a Company Page (see `organizationId`); supported goals are engagement, traffic, awareness, and video_views (video ads use the `video` field; video_views requires a video), and traffic ads require `linkUrl`. **Idempotency:** this endpoint is not idempotent at the platform level (a blind retry creates a second campaign/ad set/ad). Send an `Idempotency-Key` header to make retries safe: the first request with a given key creates the ad and we store the response; a retry with the same key replays that exact response (with `Idempotent-Replayed: true`) instead of creating duplicates. Reusing a key with a different body returns 422; a key whose first request is still in flight returns 409 (retry after a short backoff). Keys are scoped to your credential and expire after 24h.
724
869
  # @param create_standalone_ad_request [CreateStandaloneAdRequest]
@@ -2407,6 +2552,81 @@ module Zernio
2407
2552
  return data, status_code, headers
2408
2553
  end
2409
2554
 
2555
+ # Read a Reach & Frequency prediction (Meta)
2556
+ # @param prediction_id [String]
2557
+ # @param account_id [String]
2558
+ # @param ad_account_id [String]
2559
+ # @param [Hash] opts the optional parameters
2560
+ # @return [CreateRfPrediction201Response]
2561
+ def get_rf_prediction(prediction_id, account_id, ad_account_id, opts = {})
2562
+ data, _status_code, _headers = get_rf_prediction_with_http_info(prediction_id, account_id, ad_account_id, opts)
2563
+ data
2564
+ end
2565
+
2566
+ # Read a Reach &amp; Frequency prediction (Meta)
2567
+ # @param prediction_id [String]
2568
+ # @param account_id [String]
2569
+ # @param ad_account_id [String]
2570
+ # @param [Hash] opts the optional parameters
2571
+ # @return [Array<(CreateRfPrediction201Response, Integer, Hash)>] CreateRfPrediction201Response data, response status code and response headers
2572
+ def get_rf_prediction_with_http_info(prediction_id, account_id, ad_account_id, opts = {})
2573
+ if @api_client.config.debugging
2574
+ @api_client.config.logger.debug 'Calling API: AdsApi.get_rf_prediction ...'
2575
+ end
2576
+ # verify the required parameter 'prediction_id' is set
2577
+ if @api_client.config.client_side_validation && prediction_id.nil?
2578
+ fail ArgumentError, "Missing the required parameter 'prediction_id' when calling AdsApi.get_rf_prediction"
2579
+ end
2580
+ # verify the required parameter 'account_id' is set
2581
+ if @api_client.config.client_side_validation && account_id.nil?
2582
+ fail ArgumentError, "Missing the required parameter 'account_id' when calling AdsApi.get_rf_prediction"
2583
+ end
2584
+ # verify the required parameter 'ad_account_id' is set
2585
+ if @api_client.config.client_side_validation && ad_account_id.nil?
2586
+ fail ArgumentError, "Missing the required parameter 'ad_account_id' when calling AdsApi.get_rf_prediction"
2587
+ end
2588
+ # resource path
2589
+ local_var_path = '/v1/ads/rf-predictions/{predictionId}'.sub('{' + 'predictionId' + '}', CGI.escape(prediction_id.to_s))
2590
+
2591
+ # query parameters
2592
+ query_params = opts[:query_params] || {}
2593
+ query_params[:'accountId'] = account_id
2594
+ query_params[:'adAccountId'] = ad_account_id
2595
+
2596
+ # header parameters
2597
+ header_params = opts[:header_params] || {}
2598
+ # HTTP header 'Accept' (if needed)
2599
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
2600
+
2601
+ # form parameters
2602
+ form_params = opts[:form_params] || {}
2603
+
2604
+ # http body (model)
2605
+ post_body = opts[:debug_body]
2606
+
2607
+ # return_type
2608
+ return_type = opts[:debug_return_type] || 'CreateRfPrediction201Response'
2609
+
2610
+ # auth_names
2611
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
2612
+
2613
+ new_options = opts.merge(
2614
+ :operation => :"AdsApi.get_rf_prediction",
2615
+ :header_params => header_params,
2616
+ :query_params => query_params,
2617
+ :form_params => form_params,
2618
+ :body => post_body,
2619
+ :auth_names => auth_names,
2620
+ :return_type => return_type
2621
+ )
2622
+
2623
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
2624
+ if @api_client.config.debugging
2625
+ @api_client.config.logger.debug "API called: AdsApi#get_rf_prediction\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
2626
+ end
2627
+ return data, status_code, headers
2628
+ end
2629
+
2410
2630
  # List ad accounts
2411
2631
  # Returns the platform ad accounts available for the given social account (e.g. Meta ad accounts, TikTok advertiser IDs, Google Ads customer IDs). For TikTok agencies: enumerates every advertiser under every Business Center the token can read (paginated server-side), then chunks the lookup against TikTok's `/advertiser/info/` endpoint (which has a per-call cap of ≤100 IDs). Solo advertisers without a BC fall back to the OAuth-time `advertiser_ids` list. Cached for 1h on the SocialAccount; lazy-refreshed on first call after expiry.
2412
2632
  # @param account_id [String] Social account ID
@@ -3564,6 +3784,80 @@ module Zernio
3564
3784
  return data, status_code, headers
3565
3785
  end
3566
3786
 
3787
+ # Reserve a Reach & Frequency prediction (Meta)
3788
+ # Locks the quoted price + inventory until the returned `expiresAt` and mints a NEW prediction id — pass that RESERVED id (not the original) as `rfPredictionId` on POST /v1/ads/create. Release an unused reservation via DELETE. Meta only.
3789
+ # @param prediction_id [String]
3790
+ # @param reserve_rf_prediction_request [ReserveRfPredictionRequest]
3791
+ # @param [Hash] opts the optional parameters
3792
+ # @return [ReserveRfPrediction201Response]
3793
+ def reserve_rf_prediction(prediction_id, reserve_rf_prediction_request, opts = {})
3794
+ data, _status_code, _headers = reserve_rf_prediction_with_http_info(prediction_id, reserve_rf_prediction_request, opts)
3795
+ data
3796
+ end
3797
+
3798
+ # Reserve a Reach &amp; Frequency prediction (Meta)
3799
+ # Locks the quoted price + inventory until the returned &#x60;expiresAt&#x60; and mints a NEW prediction id — pass that RESERVED id (not the original) as &#x60;rfPredictionId&#x60; on POST /v1/ads/create. Release an unused reservation via DELETE. Meta only.
3800
+ # @param prediction_id [String]
3801
+ # @param reserve_rf_prediction_request [ReserveRfPredictionRequest]
3802
+ # @param [Hash] opts the optional parameters
3803
+ # @return [Array<(ReserveRfPrediction201Response, Integer, Hash)>] ReserveRfPrediction201Response data, response status code and response headers
3804
+ def reserve_rf_prediction_with_http_info(prediction_id, reserve_rf_prediction_request, opts = {})
3805
+ if @api_client.config.debugging
3806
+ @api_client.config.logger.debug 'Calling API: AdsApi.reserve_rf_prediction ...'
3807
+ end
3808
+ # verify the required parameter 'prediction_id' is set
3809
+ if @api_client.config.client_side_validation && prediction_id.nil?
3810
+ fail ArgumentError, "Missing the required parameter 'prediction_id' when calling AdsApi.reserve_rf_prediction"
3811
+ end
3812
+ # verify the required parameter 'reserve_rf_prediction_request' is set
3813
+ if @api_client.config.client_side_validation && reserve_rf_prediction_request.nil?
3814
+ fail ArgumentError, "Missing the required parameter 'reserve_rf_prediction_request' when calling AdsApi.reserve_rf_prediction"
3815
+ end
3816
+ # resource path
3817
+ local_var_path = '/v1/ads/rf-predictions/{predictionId}/reserve'.sub('{' + 'predictionId' + '}', CGI.escape(prediction_id.to_s))
3818
+
3819
+ # query parameters
3820
+ query_params = opts[:query_params] || {}
3821
+
3822
+ # header parameters
3823
+ header_params = opts[:header_params] || {}
3824
+ # HTTP header 'Accept' (if needed)
3825
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
3826
+ # HTTP header 'Content-Type'
3827
+ content_type = @api_client.select_header_content_type(['application/json'])
3828
+ if !content_type.nil?
3829
+ header_params['Content-Type'] = content_type
3830
+ end
3831
+
3832
+ # form parameters
3833
+ form_params = opts[:form_params] || {}
3834
+
3835
+ # http body (model)
3836
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(reserve_rf_prediction_request)
3837
+
3838
+ # return_type
3839
+ return_type = opts[:debug_return_type] || 'ReserveRfPrediction201Response'
3840
+
3841
+ # auth_names
3842
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
3843
+
3844
+ new_options = opts.merge(
3845
+ :operation => :"AdsApi.reserve_rf_prediction",
3846
+ :header_params => header_params,
3847
+ :query_params => query_params,
3848
+ :form_params => form_params,
3849
+ :body => post_body,
3850
+ :auth_names => auth_names,
3851
+ :return_type => return_type
3852
+ )
3853
+
3854
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
3855
+ if @api_client.config.debugging
3856
+ @api_client.config.logger.debug "API called: AdsApi#reserve_rf_prediction\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
3857
+ end
3858
+ return data, status_code, headers
3859
+ end
3860
+
3567
3861
  # Search targeting interests
3568
3862
  # Deprecated alias for `GET /v1/ads/targeting/search?dimension=interest`. Kept for backward compatibility, it returns the legacy `{ interests: [...] }` shape rather than the normalized `{ results: [...] }`. New integrations should use `GET /v1/ads/targeting/search` with `dimension=interest`.
3569
3863
  # @param q [String] Search query
@@ -290,7 +290,7 @@ module Zernio
290
290
  end
291
291
 
292
292
  # Port numbers in
293
- # Submit a port-in for one or more existing numbers from another carrier. Creates the carrier order(s), attaches the end-user (current account) info plus the LOA and invoice documents, and submits to the losing carrier. The transfer PIN is forwarded to the carrier and never stored. Ported numbers arrive voice-ready (and SMS-ready where the order supports messaging). Run the portability check (POST /v1/phone-numbers/port-in/check) and upload the two documents (POST /v1/phone-numbers/port-in/documents) first. The carrier may split the numbers into several orders (by country, number type, losing carrier); `orders` carries per-order results, and a partial failure still returns 201 with the failed orders' `error` set (they stay as cancellable drafts).
293
+ # Submit a port-in for one or more existing numbers from another carrier. Creates the carrier order(s), attaches the end-user (current account) info plus the LOA and invoice documents, and submits to the losing carrier. The transfer PIN is forwarded to the carrier and never stored. Ported numbers arrive voice-ready (and SMS-ready where the order supports messaging). Run the portability check (POST /v1/phone-numbers/port-in/check) and upload the two documents (POST /v1/phone-numbers/port-in/documents) first — uploaded documents must be attached to an order within 30 minutes or the carrier deletes them, so upload right before this call. The carrier may split the numbers into several orders (by country, number type, losing carrier); `orders` carries per-order results, and a partial failure still returns 201 with the failed orders' `error` set (they stay as cancellable drafts). Non-US/CA numbers additionally need the country-specific values from GET /v1/phone-numbers/port-in/requirements, passed via `requirements`, and must be submitted one country per request. When required information is still missing after submission, the order is kept as a resumable draft whose `error` / `declineReason` names the gaps.
294
294
  # @param create_phone_number_port_in_request [CreatePhoneNumberPortInRequest]
295
295
  # @param [Hash] opts the optional parameters
296
296
  # @return [CreatePhoneNumberPortIn201Response]
@@ -300,7 +300,7 @@ module Zernio
300
300
  end
301
301
 
302
302
  # Port numbers in
303
- # Submit a port-in for one or more existing numbers from another carrier. Creates the carrier order(s), attaches the end-user (current account) info plus the LOA and invoice documents, and submits to the losing carrier. The transfer PIN is forwarded to the carrier and never stored. Ported numbers arrive voice-ready (and SMS-ready where the order supports messaging). Run the portability check (POST /v1/phone-numbers/port-in/check) and upload the two documents (POST /v1/phone-numbers/port-in/documents) first. The carrier may split the numbers into several orders (by country, number type, losing carrier); &#x60;orders&#x60; carries per-order results, and a partial failure still returns 201 with the failed orders&#39; &#x60;error&#x60; set (they stay as cancellable drafts).
303
+ # Submit a port-in for one or more existing numbers from another carrier. Creates the carrier order(s), attaches the end-user (current account) info plus the LOA and invoice documents, and submits to the losing carrier. The transfer PIN is forwarded to the carrier and never stored. Ported numbers arrive voice-ready (and SMS-ready where the order supports messaging). Run the portability check (POST /v1/phone-numbers/port-in/check) and upload the two documents (POST /v1/phone-numbers/port-in/documents) first — uploaded documents must be attached to an order within 30 minutes or the carrier deletes them, so upload right before this call. The carrier may split the numbers into several orders (by country, number type, losing carrier); &#x60;orders&#x60; carries per-order results, and a partial failure still returns 201 with the failed orders&#39; &#x60;error&#x60; set (they stay as cancellable drafts). Non-US/CA numbers additionally need the country-specific values from GET /v1/phone-numbers/port-in/requirements, passed via &#x60;requirements&#x60;, and must be submitted one country per request. When required information is still missing after submission, the order is kept as a resumable draft whose &#x60;error&#x60; / &#x60;declineReason&#x60; names the gaps.
304
304
  # @param create_phone_number_port_in_request [CreatePhoneNumberPortInRequest]
305
305
  # @param [Hash] opts the optional parameters
306
306
  # @return [Array<(CreatePhoneNumberPortIn201Response, Integer, Hash)>] CreatePhoneNumberPortIn201Response data, response status code and response headers
@@ -491,6 +491,148 @@ module Zernio
491
491
  return data, status_code, headers
492
492
  end
493
493
 
494
+ # A port-in order's pending requirements
495
+ # The live requirements on an EXISTING porting order: which are filled, which are still pending, and which bounced on review (`requirement-info-exception`). Use it to fix and resubmit a rejected international port. Same field shape as the country-level requirements endpoint, plus per-requirement status.
496
+ # @param id [String] Porting order ID (from the port-in list).
497
+ # @param [Hash] opts the optional parameters
498
+ # @return [GetPhoneNumberPortInOrderRequirements200Response]
499
+ def get_phone_number_port_in_order_requirements(id, opts = {})
500
+ data, _status_code, _headers = get_phone_number_port_in_order_requirements_with_http_info(id, opts)
501
+ data
502
+ end
503
+
504
+ # A port-in order&#39;s pending requirements
505
+ # The live requirements on an EXISTING porting order: which are filled, which are still pending, and which bounced on review (&#x60;requirement-info-exception&#x60;). Use it to fix and resubmit a rejected international port. Same field shape as the country-level requirements endpoint, plus per-requirement status.
506
+ # @param id [String] Porting order ID (from the port-in list).
507
+ # @param [Hash] opts the optional parameters
508
+ # @return [Array<(GetPhoneNumberPortInOrderRequirements200Response, Integer, Hash)>] GetPhoneNumberPortInOrderRequirements200Response data, response status code and response headers
509
+ def get_phone_number_port_in_order_requirements_with_http_info(id, opts = {})
510
+ if @api_client.config.debugging
511
+ @api_client.config.logger.debug 'Calling API: PhoneNumbersApi.get_phone_number_port_in_order_requirements ...'
512
+ end
513
+ # verify the required parameter 'id' is set
514
+ if @api_client.config.client_side_validation && id.nil?
515
+ fail ArgumentError, "Missing the required parameter 'id' when calling PhoneNumbersApi.get_phone_number_port_in_order_requirements"
516
+ end
517
+ # resource path
518
+ local_var_path = '/v1/phone-numbers/port-in/{id}/requirements'.sub('{' + 'id' + '}', CGI.escape(id.to_s))
519
+
520
+ # query parameters
521
+ query_params = opts[:query_params] || {}
522
+
523
+ # header parameters
524
+ header_params = opts[:header_params] || {}
525
+ # HTTP header 'Accept' (if needed)
526
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
527
+
528
+ # form parameters
529
+ form_params = opts[:form_params] || {}
530
+
531
+ # http body (model)
532
+ post_body = opts[:debug_body]
533
+
534
+ # return_type
535
+ return_type = opts[:debug_return_type] || 'GetPhoneNumberPortInOrderRequirements200Response'
536
+
537
+ # auth_names
538
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
539
+
540
+ new_options = opts.merge(
541
+ :operation => :"PhoneNumbersApi.get_phone_number_port_in_order_requirements",
542
+ :header_params => header_params,
543
+ :query_params => query_params,
544
+ :form_params => form_params,
545
+ :body => post_body,
546
+ :auth_names => auth_names,
547
+ :return_type => return_type
548
+ )
549
+
550
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
551
+ if @api_client.config.debugging
552
+ @api_client.config.logger.debug "API called: PhoneNumbersApi#get_phone_number_port_in_order_requirements\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
553
+ end
554
+ return data, status_code, headers
555
+ end
556
+
557
+ # Country porting requirements
558
+ # The country-specific information a port-in needs BEYOND the LOA, invoice, and account/address details — e.g. an ID copy, proof of address, a tax id, or a porting code. Call it after the portability check (which returns each number's `countryCode` and `phoneNumberType`), render the fields, and pass the collected values as the create request's `requirements`. US/CA return an empty list.
559
+ # @param country [String] ISO country of the numbers being ported (a supported port-in country).
560
+ # @param [Hash] opts the optional parameters
561
+ # @option opts [String] :number_type The portability check&#39;s phoneNumberType — requirements differ by type. (default to 'local')
562
+ # @return [GetPhoneNumberPortInRequirements200Response]
563
+ def get_phone_number_port_in_requirements(country, opts = {})
564
+ data, _status_code, _headers = get_phone_number_port_in_requirements_with_http_info(country, opts)
565
+ data
566
+ end
567
+
568
+ # Country porting requirements
569
+ # The country-specific information a port-in needs BEYOND the LOA, invoice, and account/address details — e.g. an ID copy, proof of address, a tax id, or a porting code. Call it after the portability check (which returns each number&#39;s &#x60;countryCode&#x60; and &#x60;phoneNumberType&#x60;), render the fields, and pass the collected values as the create request&#39;s &#x60;requirements&#x60;. US/CA return an empty list.
570
+ # @param country [String] ISO country of the numbers being ported (a supported port-in country).
571
+ # @param [Hash] opts the optional parameters
572
+ # @option opts [String] :number_type The portability check&#39;s phoneNumberType — requirements differ by type. (default to 'local')
573
+ # @return [Array<(GetPhoneNumberPortInRequirements200Response, Integer, Hash)>] GetPhoneNumberPortInRequirements200Response data, response status code and response headers
574
+ def get_phone_number_port_in_requirements_with_http_info(country, opts = {})
575
+ if @api_client.config.debugging
576
+ @api_client.config.logger.debug 'Calling API: PhoneNumbersApi.get_phone_number_port_in_requirements ...'
577
+ end
578
+ # verify the required parameter 'country' is set
579
+ if @api_client.config.client_side_validation && country.nil?
580
+ fail ArgumentError, "Missing the required parameter 'country' when calling PhoneNumbersApi.get_phone_number_port_in_requirements"
581
+ end
582
+ if @api_client.config.client_side_validation && country.to_s.length > 2
583
+ fail ArgumentError, 'invalid value for "country" when calling PhoneNumbersApi.get_phone_number_port_in_requirements, the character length must be smaller than or equal to 2.'
584
+ end
585
+
586
+ if @api_client.config.client_side_validation && country.to_s.length < 2
587
+ fail ArgumentError, 'invalid value for "country" when calling PhoneNumbersApi.get_phone_number_port_in_requirements, the character length must be greater than or equal to 2.'
588
+ end
589
+
590
+ allowable_values = ["local", "mobile", "national", "toll_free"]
591
+ if @api_client.config.client_side_validation && opts[:'number_type'] && !allowable_values.include?(opts[:'number_type'])
592
+ fail ArgumentError, "invalid value for \"number_type\", must be one of #{allowable_values}"
593
+ end
594
+ # resource path
595
+ local_var_path = '/v1/phone-numbers/port-in/requirements'
596
+
597
+ # query parameters
598
+ query_params = opts[:query_params] || {}
599
+ query_params[:'country'] = country
600
+ query_params[:'numberType'] = opts[:'number_type'] if !opts[:'number_type'].nil?
601
+
602
+ # header parameters
603
+ header_params = opts[:header_params] || {}
604
+ # HTTP header 'Accept' (if needed)
605
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
606
+
607
+ # form parameters
608
+ form_params = opts[:form_params] || {}
609
+
610
+ # http body (model)
611
+ post_body = opts[:debug_body]
612
+
613
+ # return_type
614
+ return_type = opts[:debug_return_type] || 'GetPhoneNumberPortInRequirements200Response'
615
+
616
+ # auth_names
617
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
618
+
619
+ new_options = opts.merge(
620
+ :operation => :"PhoneNumbersApi.get_phone_number_port_in_requirements",
621
+ :header_params => header_params,
622
+ :query_params => query_params,
623
+ :form_params => form_params,
624
+ :body => post_body,
625
+ :auth_names => auth_names,
626
+ :return_type => return_type
627
+ )
628
+
629
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
630
+ if @api_client.config.debugging
631
+ @api_client.config.logger.debug "API called: PhoneNumbersApi#get_phone_number_port_in_requirements\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
632
+ end
633
+ return data, status_code, headers
634
+ end
635
+
494
636
  # Get declined requirements
495
637
  # For a number in `regulatory_declined`, returns ONLY the requirements the reviewer flagged declined, as a form spec (same shape as the KYC form GET). The customer fixes just those — Telnyx supports correcting a declined requirement group and re-submitting it (no new number/group). Falls back to the full spec if the provider exposes no per-requirement flags.
496
638
  # @param id [String] Phone number record ID.
@@ -1234,10 +1376,10 @@ module Zernio
1234
1376
  end
1235
1377
 
1236
1378
  # Upload a porting document
1237
- # Upload ONE porting document (the signed LOA or a recent carrier invoice) and get back its `documentId`, which the port-in create request takes as `loaDocumentId` / `invoiceDocumentId`. PDF, JPEG, or PNG, 10MB max.
1379
+ # Upload ONE porting document and get back its `documentId`. For the signed LOA / carrier invoice the id goes to `loaDocumentId` / `invoiceDocumentId`; for a country-specific document requirement (international ports) it becomes that requirement's `fieldValue`. Requirement documents are normalized to PDF automatically (regulators reject raw images). PDF, JPEG, or PNG, 10MB max. Uploads must be attached to an order within 30 minutes or the carrier deletes them.
1238
1380
  # @param file [File] The document (PDF/JPEG/PNG, 10MB max).
1239
1381
  # @param [Hash] opts the optional parameters
1240
- # @option opts [String] :kind Informational; used for the stored filename.
1382
+ # @option opts [String] :kind &#39;loa&#39;, &#39;invoice&#39;, or any short slug for requirement documents. Informational; used for the stored filename.
1241
1383
  # @return [UploadPhoneNumberPortInDocument200Response]
1242
1384
  def upload_phone_number_port_in_document(file, opts = {})
1243
1385
  data, _status_code, _headers = upload_phone_number_port_in_document_with_http_info(file, opts)
@@ -1245,10 +1387,10 @@ module Zernio
1245
1387
  end
1246
1388
 
1247
1389
  # Upload a porting document
1248
- # Upload ONE porting document (the signed LOA or a recent carrier invoice) and get back its &#x60;documentId&#x60;, which the port-in create request takes as &#x60;loaDocumentId&#x60; / &#x60;invoiceDocumentId&#x60;. PDF, JPEG, or PNG, 10MB max.
1390
+ # Upload ONE porting document and get back its &#x60;documentId&#x60;. For the signed LOA / carrier invoice the id goes to &#x60;loaDocumentId&#x60; / &#x60;invoiceDocumentId&#x60;; for a country-specific document requirement (international ports) it becomes that requirement&#39;s &#x60;fieldValue&#x60;. Requirement documents are normalized to PDF automatically (regulators reject raw images). PDF, JPEG, or PNG, 10MB max. Uploads must be attached to an order within 30 minutes or the carrier deletes them.
1249
1391
  # @param file [File] The document (PDF/JPEG/PNG, 10MB max).
1250
1392
  # @param [Hash] opts the optional parameters
1251
- # @option opts [String] :kind Informational; used for the stored filename.
1393
+ # @option opts [String] :kind &#39;loa&#39;, &#39;invoice&#39;, or any short slug for requirement documents. Informational; used for the stored filename.
1252
1394
  # @return [Array<(UploadPhoneNumberPortInDocument200Response, Integer, Hash)>] UploadPhoneNumberPortInDocument200Response data, response status code and response headers
1253
1395
  def upload_phone_number_port_in_document_with_http_info(file, opts = {})
1254
1396
  if @api_client.config.debugging
@@ -1258,10 +1400,6 @@ module Zernio
1258
1400
  if @api_client.config.client_side_validation && file.nil?
1259
1401
  fail ArgumentError, "Missing the required parameter 'file' when calling PhoneNumbersApi.upload_phone_number_port_in_document"
1260
1402
  end
1261
- allowable_values = ["loa", "invoice"]
1262
- if @api_client.config.client_side_validation && opts[:'kind'] && !allowable_values.include?(opts[:'kind'])
1263
- fail ArgumentError, "invalid value for \"kind\", must be one of #{allowable_values}"
1264
- end
1265
1403
  # resource path
1266
1404
  local_var_path = '/v1/phone-numbers/port-in/documents'
1267
1405
 
@@ -22,9 +22,15 @@ module Zernio
22
22
  # Qualifies for the carrier's accelerated FastPort lane.
23
23
  attr_accessor :fast_portable
24
24
 
25
- # Line type when known (mobile, landline, voip…). A mobile number requires the transfer PIN at submit.
25
+ # Line type when known (mobile, landline, voip…). A US/CA mobile number requires the transfer PIN at submit.
26
26
  attr_accessor :line_type
27
27
 
28
+ # ISO country of the number — pass it to GET /v1/phone-numbers/port-in/requirements for international numbers.
29
+ attr_accessor :country_code
30
+
31
+ # Carrier number-type classification (local, mobile, national, toll_free…) — the numberType for the requirements endpoint.
32
+ attr_accessor :phone_number_type
33
+
28
34
  # Carrier reason when not portable; null when portable.
29
35
  attr_accessor :not_portable_reason
30
36
 
@@ -35,6 +41,8 @@ module Zernio
35
41
  :'portable' => :'portable',
36
42
  :'fast_portable' => :'fastPortable',
37
43
  :'line_type' => :'lineType',
44
+ :'country_code' => :'countryCode',
45
+ :'phone_number_type' => :'phoneNumberType',
38
46
  :'not_portable_reason' => :'notPortableReason'
39
47
  }
40
48
  end
@@ -56,6 +64,8 @@ module Zernio
56
64
  :'portable' => :'Boolean',
57
65
  :'fast_portable' => :'Boolean',
58
66
  :'line_type' => :'String',
67
+ :'country_code' => :'String',
68
+ :'phone_number_type' => :'String',
59
69
  :'not_portable_reason' => :'String'
60
70
  }
61
71
  end
@@ -64,6 +74,8 @@ module Zernio
64
74
  def self.openapi_nullable
65
75
  Set.new([
66
76
  :'line_type',
77
+ :'country_code',
78
+ :'phone_number_type',
67
79
  :'not_portable_reason'
68
80
  ])
69
81
  end
@@ -100,6 +112,14 @@ module Zernio
100
112
  self.line_type = attributes[:'line_type']
101
113
  end
102
114
 
115
+ if attributes.key?(:'country_code')
116
+ self.country_code = attributes[:'country_code']
117
+ end
118
+
119
+ if attributes.key?(:'phone_number_type')
120
+ self.phone_number_type = attributes[:'phone_number_type']
121
+ end
122
+
103
123
  if attributes.key?(:'not_portable_reason')
104
124
  self.not_portable_reason = attributes[:'not_portable_reason']
105
125
  end
@@ -129,6 +149,8 @@ module Zernio
129
149
  portable == o.portable &&
130
150
  fast_portable == o.fast_portable &&
131
151
  line_type == o.line_type &&
152
+ country_code == o.country_code &&
153
+ phone_number_type == o.phone_number_type &&
132
154
  not_portable_reason == o.not_portable_reason
133
155
  end
134
156
 
@@ -141,7 +163,7 @@ module Zernio
141
163
  # Calculates hash code according to all attributes.
142
164
  # @return [Integer] Hash code
143
165
  def hash
144
- [phone_number, portable, fast_portable, line_type, not_portable_reason].hash
166
+ [phone_number, portable, fast_portable, line_type, country_code, phone_number_type, not_portable_reason].hash
145
167
  end
146
168
 
147
169
  # Builds the object from hash