Replace a location's rules
Replaces the rules of the location in one environment, in the order given; an empty list removes them.
The first rule whose conditions all hold for an end user and their app shows them its paywall's deployed build, in place of what the location shows everyone else, and keeps them out of an A/B test running there. Conditions are those of a feature flag's rule. Pins are read before rules. A production rule answers every app; a test rule answers apps using a test key only and is read first there. A rule shows only where the location shows something in that environment.
Guide: Paywalls in your app
A project secret key: vh_sk_... for production, vh_sk_test_... for test. Keep it on your servers.
In: header
Path parameters
The project's id, proj_.... A secret key works only in the project it belongs to.
The location's id, pw_loc_....
Query parameters
The environment whose rules are replaced: production, the default, whose rules answer every app, or test, whose rules answer apps using a test key only and are read first there.
Value in
- "production"
- "test"
Request body
application/json
TypeScript definitions
Use the request body type in TypeScript.
Every rule the environment has from now on, in the order they are read, at most 20; an empty list removes them all.
items <= 20Examples
curl -X PUT "https://api.voidhash.com/api/v1/projects/proj_tz4a98xxat96iws9zmbrgj3a/paywall-locations/pw_loc_e2r5t8y1u4i7o0p3a6s9d2f5/rules" \ -H "Authorization: Bearer vh_sk_..." \ -H "Content-Type: application/json" \ -d '{ "rules": [ { "name": "Germany and Austria", "conditions": [ { "attribute": "country", "op": "in", "values": [ "DE", "AT" ] }, { "attribute": "app_version", "op": "gte", "values": [ "2.4" ] } ], "paywallId": "pw_r3t6y9u2i5o8p1a4s7d0f3g6" } ] }'{ "rules": [ { "id": "pw_loc_rule_k9m4x1c6v8b3n5q0w2e7h7d2", "paywallLocationId": "pw_loc_e2r5t8y1u4i7o0p3a6s9d2f5", "environment": "production", "position": 0, "name": "Germany and Austria", "conditions": [ { "attribute": "country", "key": null, "op": "in", "values": [ "DE", "AT" ] }, { "attribute": "app_version", "key": null, "op": "gte", "values": [ "2.4" ] } ], "paywallId": "pw_r3t6y9u2i5o8p1a4s7d0f3g6" } ]}{ "error": { "type": "invalid_request", "code": "invalid_rules", "message": "Rule 1: The condition on country needs at least one value.", "param": "rules" }}{ "error": { "type": "unauthenticated", "code": "invalid_api_key", "message": "This secret key is not valid." }}{ "error": { "type": "permission_denied", "code": "permission_denied", "message": "Insufficient permissions." }}{ "error": { "type": "not_found", "code": "paywall_not_found", "message": "This project has no paywall pw_h7d2k9m4x1c6v8b3n5q0w2e7.", "param": "paywallId" }}{ "error": { "type": "conflict", "code": "paywall_not_deployed", "message": "Paywall pw_h7d2k9m4x1c6v8b3n5q0w2e7 has no deployed build yet. Build it and deploy the build, then show it here.", "param": "paywallId" }}{ "error": { "type": "internal", "code": "internal_error", "message": "Something went wrong on our side. Try again, and contact support with the Request-Id header if it keeps failing." }}Response body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
Errors
| Status | type | code | When |
|---|---|---|---|
| 400 | invalid_request | invalid_rules | For a rule without conditions or with one that can't be read. |
| 404 | not_found | paywall_not_found | When the project has no such paywall. |
| 409 | conflict | paywall_not_deployed | When a paywall has no deployed build. |
| 409 | conflict | paywall_location_archived | When the location is archived. |
It can also fail with the errors every operation shares, such as unauthenticated; see Errors.
More in Paywall locations
- List paywall locations
GET - Create a paywall location
POST - Retrieve a paywall location
GET - Update a paywall location
PATCH - Archive a paywall location
POST - Place a paywall at a location
PUT - End a location's placement
DELETE - List what a location has shown
GET - List a location's pins
GET - Pin an end user to a paywall
PUT - Remove a pin
DELETE - List a location's rules
GET
Something wrong or missing on this page? Tell us by email or on Discord.