Skip to content

Commit 8dc30fc

Browse files
Merge pull request #190940 from dannyevers/57262-saas-2
57262-saas-2
2 parents 9bef302 + f3c8c5e commit 8dc30fc

File tree

4 files changed

+49
-27
lines changed

4 files changed

+49
-27
lines changed
72.7 KB
Loading

articles/marketplace/partner-center-portal/pc-saas-fulfillment-life-cycle.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ description: Learn how to manage the SaaS subscription life cycle by using the f
44
ms.service: marketplace
55
ms.subservice: partnercenter-marketplace-publisher
66
ms.topic: reference
7-
ms.date: 10/27/2021
7+
ms.date: 03/07/2022
88
author: arifgani
99
ms.author: argani
1010
---
@@ -35,7 +35,7 @@ An example of such call is `https://contoso.com/signup?token=<blob>`, but the la
3535
> [!IMPORTANT]
3636
> The landing page URL must be up and running all day, every day, and ready to receive new calls from Microsoft at all times. If the landing page becomes unavailable, customers won't be able to sign up for the SaaS service and start using it.
3737
38-
Next, the publisher must pass the *token* back to Microsoft by calling the [SaaS Resolve API](pc-saas-fulfillment-subscription-api.md#resolve-a-purchased-subscription), and entering the token as the value of the `x-ms-marketplace-token header` header parameter. As the result of the Resolve API call, the token is exchanged for details of the SaaS purchase such as the unique ID of the purchase, purchased offer ID, and purchased plan ID.
38+
Next, the publisher must pass the *token* back to Microsoft by calling the [SaaS Resolve API](pc-saas-fulfillment-subscription-api.md#resolve-a-purchased-subscription), and entering the token as the value of the `x-ms-marketplace-token header` parameter. As the result of the Resolve API call, the token is exchanged for details of the SaaS purchase such as the unique ID of the purchase, purchased offer ID, and purchased plan ID.
3939

4040
On the landing page, the customer should be signed in to the new or existing SaaS account via Azure Active Directory (Azure AD) single sign-on (SSO).
4141

@@ -50,7 +50,7 @@ The publisher should implement SSO to provide the user experience required by Mi
5050
After sign in, the customer should complete the SaaS configuration on the publisher side. Then the publisher must call the [Activate Subscription API](pc-saas-fulfillment-subscription-api.md#activate-a-subscription) to send a signal to Azure Marketplace that the provisioning of the SaaS account is complete.
5151
This action will start the customer's billing cycle. If the Activate Subscription API call is not successful, the customer isn't billed for the purchase.
5252

53-
![Diagram showing the A P I calls for a provisioning scenario.](./media/saas-update-api-v2-calls-from-saas-service-a.png)
53+
[ ![Diagram showing the A P I calls for a provisioning scenario.](./media/saas-update-api-v2-calls-from-saas-service-a.png) ](./media/saas-update-api-v2-calls-from-saas-service-a.png#lightbox)
5454

5555
### Active (*Subscribed*)
5656

articles/marketplace/partner-center-portal/pc-saas-fulfillment-operations-api.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ description: Learn how to use the Operations APIs, which are part of the SaaS Fu
44
ms.service: marketplace
55
ms.subservice: partnercenter-marketplace-publisher
66
ms.topic: reference
7-
ms.date: 11/10/2021
7+
ms.date: 03/07/2022
88
author: arifgani
99
ms.author: argani
1010
---
@@ -27,7 +27,7 @@ Get list of the pending operations for the specified SaaS subscription. The publ
2727
| `subscriptionId` | The unique identifier of the purchased SaaS subscription. This ID is obtained after resolving the commercial marketplace authorization token by using the Resolve API. |
2828

2929
*Request headers:*
30-
30+
3131
| Parameter | Value |
3232
| --------------- | --------------- |
3333
| `content-type` | `application/json` |
@@ -52,7 +52,7 @@ Returns pending operations on the specified SaaS subscription.
5252
"offerId": "offer1", // purchased offer ID
5353
"publisherId": "contoso",
5454
"planId": "silver", // purchased plan ID
55-
"quantity": "20", // purchased amount of seats, will be empty is not relevant
55+
"quantity": 20, // purchased amount of seats, will be empty is not relevant
5656
"action": "Reinstate",
5757
"timeStamp": "2018-12-01T00:00:00", // UTC
5858
"status": "InProgress" // the only status that can be returned in this case
@@ -118,7 +118,7 @@ Response body:
118118
"offerId": "offer1", // purchased offer ID
119119
"publisherId": "contoso",
120120
"planId": "silver", // purchased plan ID
121-
"quantity": "20", // purchased amount of seats
121+
"quantity": 20, // purchased amount of seats
122122
"action": "ChangePlan", // Can be ChangePlan, ChangeQuantity or Reinstate
123123
"timeStamp": "2018-12-01T00:00:00", // UTC
124124
"status": "InProgress", // Possible values: NotStarted, InProgress, Failed, Succeeded, Conflict (new quantity / plan is the same as existing)

articles/marketplace/partner-center-portal/pc-saas-fulfillment-subscription-api.md

Lines changed: 42 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ description: Learn how to use the Subscription APIs, which are part of the the
44
ms.service: marketplace
55
ms.subservice: partnercenter-marketplace-publisher
66
ms.topic: reference
7-
ms.date: 12/08/2021
7+
ms.date: 03/07/2022
88
author: arifgani
99
ms.author: argani
1010
---
@@ -77,13 +77,16 @@ Response body example:
7777
"planId": "silver",
7878
"term": {
7979
"termUnit": "P1M",
80-
"startDate": "2019-05-31",
81-
"endDate": "2019-06-29"
80+
"startDate": "2022-03-07T00:00:00Z",
81+
"endDate": "2022-04-06T00:00:00Z"
8282
},
83-
"isTest": true,
83+
"autoRenew": true/false,
84+
"isTest": true/false,
8485
"isFreeTrial": false,
8586
"allowedCustomerOperations": ["Delete", "Update", "Read"],
86-
"sandboxType": "None",
87+
"sandboxType": "None",
88+
"lastModified": "0001-01-01T00:00:00",
89+
"quantity": 5,
8790
"sessionMode": "None"
8891
}
8992
}
@@ -129,18 +132,18 @@ After the SaaS account is configured for an end user, the publisher must call th
129132
```json
130133
{ // needed for validation of the activation request
131134
"planId": "gold", // purchased plan, cannot be empty
132-
"quantity": "" // purchased number of seats, can be empty if plan is not per seat
135+
"quantity": "3" // purchased number of seats, can be empty if plan is not per seat
133136
}
134137
```
135138

136139
*Response codes:*
137140

138-
Code: 200
141+
Code: 200
139142
The subscription was marked as Subscribed on the Microsoft side.
140143

141144
There is no response body for this call.
142145

143-
Code: 400
146+
Code: 400
144147
Bad request: validation failed.
145148

146149
* `planId` doesn't exist in request payload.
@@ -185,7 +188,7 @@ The API returns paginated results of 100 per page.
185188

186189
*Response codes:*
187190

188-
Code: 200
191+
Code: 200
189192
Returns the list of all existing subscriptions for all offers made by this publisher, based on the publisher's authorization token.
190193

191194
*Response body example:*
@@ -199,24 +202,25 @@ Returns the list of all existing subscriptions for all offers made by this publi
199202
"publisherId": "contoso", // publisher ID
200203
"offerId": "offer1", // purchased offer ID
201204
"planId": "silver", // purchased plan ID
202-
"quantity": "10", // purchased amount of seats, will be empty if plan is not per seat
205+
"quantity": 10, // purchased amount of seats, will be empty if plan is not per seat
203206
"beneficiary": { // email address, user ID and tenant ID for which SaaS subscription was purchased.
204207
"emailId": " [email protected]",
205208
"objectId": "<guid>",
206209
"tenantId": "<guid>",
207-
"pid": "<ID of the user>"
210+
"puid": "<ID of the user>"
208211
},
209212
"purchaser": { // email address, user ID and tenant ID that purchased the SaaS subscription. These could be different from beneficiary information for reseller (CSP) purchase
210213
"emailId": " [email protected]",
211214
"objectId": "<guid>",
212215
"tenantId": "<guid>",
213-
"pid": "<ID of the user>"
216+
"puid": "<ID of the user>"
214217
},
215218
"term": { // The period for which the subscription was purchased.
216-
"startDate": "2019-05-31", //format: YYYY-MM-DD. This is the date when the subscription was activated by the ISV and the billing started. This field is relevant only for Active and Suspended subscriptions.
217-
"endDate": "2019-06-30", // This is the last day the subscription is valid. Unless stated otherwise, the automatic renew will happen the next day. This field is relevant only for Active and Suspended subscriptions.
219+
"startDate": "2022-03-04T00:00:00Z", //format: YYYY-MM-DD. This is the date when the subscription was activated by the ISV and the billing started. This field is relevant only for Active and Suspended subscriptions.
220+
"endDate": "2022-04-03T00:00:00Z", // This is the last day the subscription is valid. Unless stated otherwise, the automatic renew will happen the next day. This field is relevant only for Active and Suspended subscriptions.
218221
"termUnit": "P1M" // where P1M is monthly and P1Y is yearly. Also reflected in the startDate and endDate values
219222
},
223+
"autoRenew": true,
220224
"allowedCustomerOperations": ["Read", "Update", "Delete"], // Indicates operations allowed on the SaaS subscription for beneficiary. For CSP-initiated purchases, this will always be "Read" because the customer cannot update or delete subscription in this flow. Purchaser can perform all operations on the subscription.
221225
"sessionMode": "None", // not relevant
222226
"isFreeTrial": true, // true - the customer subscription is currently in free trial, false - the customer subscription is not currently in free trial. (Optional field -– if not returned, the value is false.)
@@ -249,6 +253,7 @@ Returns the list of all existing subscriptions for all offers made by this publi
249253
"endDate": "2020-04-30",
250254
"termUnit": "P1Y"
251255
},
256+
"autoRenew": false
252257
"allowedCustomerOperations": ["Read"],
253258
"sessionMode": "None",
254259
"isFreeTrial": false,
@@ -307,28 +312,31 @@ Returns details for a SaaS subscription based on the `subscriptionId` provided.
307312
"publisherId": "contoso", // publisher ID
308313
"offerId": "offer1", // purchased offer ID
309314
"planId": "silver", // purchased plan ID
310-
"quantity": "10", // purchased amount of seats, will be empty if plan is not per seat
315+
"quantity": 10, // purchased amount of seats, will be empty if plan is not per seat
311316
"beneficiary": { // email address, user ID and tenant ID for which SaaS subscription is purchased.
312317
"emailId": "[email protected]",
313318
"objectId": "<guid>",
314319
"tenantId": "<guid>",
315-
"pid": "<ID of the user>"
320+
"puid": "<ID of the user>"
316321
},
317322
"purchaser": { // email address ,user ID and tenant ID that purchased the SaaS subscription. These could be different from beneficiary information for reseller (CSP) scenario
318323
"emailId": "[email protected]",
319324
"objectId": "<guid>",
320325
"tenantId": "<guid>",
321-
"pid": "<ID of the user>"
326+
"puid": "<ID of the user>"
322327
},
323328
"allowedCustomerOperations": ["Read", "Update", "Delete"], // Indicates operations allowed on the SaaS subscription for beneficiary. For CSP-initiated purchases, this will always be "Read" because the customer cannot update or delete subscription in this flow. Purchaser can perform all operations on the subscription.
324329
"sessionMode": "None", // not relevant
325330
"isFreeTrial": false, // true - the customer subscription is currently in free trial, false - the customer subscription is not currently in free trial. Optional field – if not returned the value is false.
331+
"autoRenew": true,
326332
"isTest": false, // not relevant
327333
"sandboxType": "None", // not relevant
334+
"created": "2022-03-01T22:59:45.5468572Z",
335+
"lastModified": "0001-01-01T00:00:00",
328336
"saasSubscriptionStatus": " Subscribed ", // Indicates the status of the operation: PendingFulfillmentStart, Subscribed, Suspended or Unsubscribed.
329337
"term": { // the period for which the subscription was purchased
330-
"startDate": "2019-05-31", //format: YYYY-MM-DD. This is the date when the subscription was activated by the ISV and the billing started. This field is relevant only for Active and Suspended subscriptions.
331-
"endDate": "2019-06-29", // This is the last day the subscription is valid. Unless stated otherwise, the automatic renew will happen the next day. This field is relevant only for Active and Suspended subscriptions.
338+
"startDate": "2022-03-04T00:00:00Z", //format: YYYY-MM-DD. This is the date when the subscription was activated by the ISV and the billing started. This field is relevant only for Active and Suspended subscriptions.
339+
"endDate": "2022-04-03T00:00:00Z", // This is the last day the subscription is valid. Unless stated otherwise, the automatic renew will happen the next day. This field is relevant only for Active and Suspended subscriptions.
332340
"termUnit": "P1M" //where P1M is monthly and P1Y is yearly. Also reflected in the startDate and endDate values.
333341
}
334342
}
@@ -383,11 +391,25 @@ Response body example:
383391
"planId": "Platinum001",
384392
"displayName": "Private platinum plan for Contoso", // display name of the plan as it appears in the marketplace
385393
"isPrivate": true //true or false
394+
"description": "plan description",
395+
"minQuantity": 5,
396+
"maxQuantity": 100,
397+
"hasFreeTrials": false,
398+
"isPricePerSeat": true,
399+
"isStopSell": false,
400+
"market": "US",
386401
},
387402
{
388403
"planId": "gold",
389404
"displayName": "Gold plan for Contoso",
390-
"isPrivate": false //true or false
405+
"isPrivate": false //true or false,
406+
"description": "gold plan details.",
407+
"minQuantity": 1,
408+
"maxQuantity": 5,
409+
"hasFreeTrials": false,
410+
"isPricePerSeat": true,
411+
"isStopSell": false,
412+
"market": "US",
391413
}
392414
]
393415
}

0 commit comments

Comments
 (0)