Manual

Introduction

The sidebar on the left contains links to the corresponding section:

  • Username - links to the personal profile.
  • Dashboard - view the current status in the form of charts and graphs.
  • Applications - application management.
  • Unlock codes - unlock codes generated automatically or downloaded by you.
  • Payments - history of users' incoming payments.
  • Manual - the current user manual.

Dashboard

You can set common filters for all widgets in the dashboard:

  • Currency - the currency into which incoming and outgoing amounts will be converted on the dashboard.
  • Period - is the period of time for which data is displayed in the charts and tables on the dashboard. It determines the interval during which information and statistics about payments, applications, and other parameters are analyzed and displayed.

Balance

This dashboard section displays the key financial metrics available for withdrawal. It shows aggregated information on all user payments, taking into account the fees deducted by payment systems and the PayToUse service.

The following amounts are displayed in this block:

  • Gross: The total volume of all user payments for the selected period, before any fees are deducted.
  • Net: The total amount of all payments for the selected period, after deducting payment system and PayToUse service fees.
  • Pending: The net amount from payments that are not yet available for withdrawal. Funds become available for withdrawal 7 days after the payment is made.
  • Available: The total net amount of all payments that can already be withdrawn to your account. This is the primary metric reflecting your actual withdrawable balance.

Test payments are excluded from all four amounts above, as well as from the Payments widget below - they never carry real money.

Withdraw

Below the available amount indicator, there is a "Withdraw" button. It is used to initiate a request to transfer your earned funds.

When you click this button, a modal window opens where you must specify the payment details for the transfer.

Important note: The system automatically uses the entire available amount shown in the corresponding field for withdrawal. You cannot specify an arbitrary amount lower than the available balance. The total withdrawal amount is the sum of all payments that are in the "available for withdrawal" status.

In the modal window, you can select the amount and currency for withdrawal. The available currencies are determined by your payment methods.

Note: If the selected currency is not supported for the specified withdrawal method, the withdrawal request will be rejected.

For more details on the statuses and history of your withdrawal requests, please refer to the Withdrawals section.

Payments

The Payments widget includes a table of payments grouped by application for the selected period.

Table fields:

  • Application - application. Only applications for which payments have been made during the selected period are displayed in the table.
  • Payments - number of payments.
  • Gross amount - the total amount of all user payments for the selected period excluding the fees of payment systems and PayToUse.
  • Net amount - the total amount of all payments for the selected period minus fees of payment systems and PayToUse.

The graph shows the dynamics of Net amount and Gross amount values by day.

New users

The graph of new users shows two values in dynamics by day:

  • New users - the number of new API calls. API accesses are recorded only if the device parameter - a unique device identifier - is passed when sending a request to the API. This parameter must be really unique for the device. (see Sending a request)
  • Payments - the number of payments for the same period by day.

Conversion

The Conversion metric refers to the assessment of your sales efficiency to convert New users into Payments.

The graph shows the ratio of the number of Payments to the number of New users, in percent.

Applications

When you go to this section, a list of your applications opens.

The list of columns in the application table:

  • # - unique application identifier. Used when verifying the application code or displaying the payment form.
  • Name - application name. The name is displayed only to you in reports and the dashboard. Clicking on the application name opens the application editing page.
  • Status - the current status of the application. It matches how far the setup wizard has progressed. It can be:
    • Created - the application has just been created, the Application step is not completed yet.
    • Description - the Description step is not completed yet.
    • Price - the Price step is not completed yet.
    • Test - all setup steps are completed, but the application has not been launched yet. It can be used for test payments. It is not accessible to end users.
    • Run - the application is launched and accepts real payments.
  • Created - the date of application creation.
  • Additional control buttons:
    • Delete - to remove the application from the list.

Creating or editing an application

To accept payments, you must consistently fill out all the necessary application data and activate app.

The button to create a new application is located in the title bar of the application list.

Application

Fields available when creating an application:

  • Name - the name of the application that only you can see in reports or on the dashboard. The name will be displayed in the page header of the saved application. As long as the application is not saved, "New app" is displayed instead of the name. The field is mandatory to enter.
  • Contact email - the email address to which copies of messages sent to users will be sent. This address is also specified in the "Reply-to" field and is used to reply the user to the received e-mail with the code. The field is mandatory to enter. By default, the field is populated with the value from the developer profile. The value can be changed to a different value.
  • Application type - type of application:
    • Single - a regular application with its own payment form and its own unlock codes.
    • Group with key for only one app - one purchase for several applications. The user pays once on the payment form of the group, and the code can be activated in any one of the applications of the group. After activation in one application, the code becomes unavailable in the others.
    • Group with key for all apps - one purchase for several applications. The user pays once on the payment form of the group and receives one code that works in all applications of the group. In each application, the code is activated and linked to the device separately. The term of the code is common: it is counted from the first activation in any application of the group.
  • List of applications of the group - shown for group types. Select an application in the list and click Add. At least two applications must be added to the group. Only your single applications for which unlock codes are generated are available in the list. A copy of the group code is created for each application of the group, and in the unlock codes list such codes are shown under the group code with the Unknown status.
  • Enable feedback during payment - adds a field to the payment form for users to enter free text. Feedback is added to the developer's email copy. Feedback can also be seen in the payment details.

Start typing changing values and the Save button appears. The Save button allows you to save your changes without going to the next page. The Next button saves the changes and moves to the next page. You can always return to make changes later.

In the page header, only the saved application pages are available for navigation. You can click Next or go to the section in the page header.

Description

Select a language from the list and click Add.

A tab with localized application texts for the selected language will appear.

Available languages:

  • German
  • English
  • French
  • Spanish
  • Russian
  • Chinese Simplified

The fields in the description are used to display information on the payment form and in the reply message to the user:

  • Localized name - the name of the application for the selected language. It is displayed on the payment form and in the payment notification email. By default, when adding a language, the application name is inserted. You can set a different name for each language. Required field.
  • Application description - a brief description of the application. Displayed on the payment form under the application name. Optional field. You can leave it empty if you don't want any description to be displayed.
  • Purchase confirmation message - additional information that will be sent to the user in the email upon successful payment. The response text is added at the end of the email after the standard response.

At least one language must be added to save and go to the next page.

The language displayed in the payment form is determined automatically on the basis of the user's preferences specified in the browser settings. Mark one of the languages with the radio button next to its tab (tooltip Use default): its texts are shown when the user's language is not among the added ones.

To remove a language, click the delete button on its tab and confirm the deletion.

Start typing or changing values and the Save button appears. The Save button allows you to save your changes without going to the next page. The Next button saves the changes and moves to the next page. You can always return to make changes later.

In the page header, only the saved application pages are available for navigation. You can click Next or go to the section in the page header.

Price

The page contains a list of prices and fields related to payment:

  • Trial period - the length of the trial period.
  • Unit of time - the time unit of the trial period. For example, if you specify 7 days, it means that after 7 days after the application's first API call it will return a response that the trial period has expired. The time of the first device call is saved.
  • Price calculating method - The method of price calculation from the list:
    • Price calculation depending on the term - In the payment form, the user specifies the activation period of the code, and the price is automatically calculated according to the table below. The user receives an automatically generated unlock code in the response email.
    • Term calculation depending on the price - In the payment form, the user selects a price from the list or enters their own price value, and the period is automatically calculated according to the table below. The user receives an automatically generated code in the response message.
    • Permanent code - In the payment form, the user selects a price from the list or enters their own price value. After payment, they receive a code from the list below, corresponding to the selected price, in the response email.
    • Donation - In the payment form, the user selects a price from the list or enters their own price value. For Donation-type applications, an unlock code is not generated.
    • Temporary code with price depending on the term and Temporary code with term depending on the price - the application receives a temporary code for the device from the API and shows it to the user together with a QR code leading to the payment form. The user pays for this code: the price depends on the selected term, or the term depends on the paid price, as in the methods above. After payment, the code is activated for this device only. Such a code cannot be reset and transferred to another device.

For group applications, only the Price calculation depending on the term and Term calculation depending on the price methods are available. For the Donation method, the trial period is not used.

The Price list table sets the price tiers. Add a row with the Add button and remove it with the Delete button. The columns of the table depend on the price calculating method:

  • Term, Price - the term of the code (a number and a unit of time: days, months, years or forever) and its price.
  • Price, Code - for the Permanent code method: the price and the code that the user receives after paying it (up to 12 characters).
  • Price - for the Donation method: only the suggested amounts.

The row marked with the radio button (tooltip Use default) is preselected on the payment form.

The price is set in US dollars. The minimum price is 1 US dollar.

Start typing or changing values and the Save button appears. The Save button allows you to save your changes without going to the next page. The Next button saves the changes and moves to the next page. You can always return to make changes later.

In the page header, only the saved application pages are available for navigation. You can click Next or go to the section in the page header.

Test mode

This page sets the values:

  • Code length - the length of the generated code, if applicable.
  • Code character set - the set of characters from which the code is generated:
    • Numeric code - the code is generated using only the digits 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Leading zeros may be included in the code. Leading zeros are significant when verifying the code.
    • Alphanumeric code - the code is generated using the characters 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, G, H, I, G, K, L, M, N, P, Q, R, S, T, U, V, X, Y, Z. The code is generated and sent to the user using uppercase characters. The case of the characters does not matter when verifying the code.
  • Allow leading zeros - allows leading zeros in the generated code. Only available for the Numeric code character set.
  • Allow send code back by device ID - allows the code to be resent to the same email by repeating the device identifier check. Only available for single applications.
  • Release date - the date the application becomes available for regular users. Together with Free for beta testers after release, it defines a free period for devices that contact the application before this date.
  • Free for beta testers after release - the length of the free period (in the selected Unit of time) granted to devices whose first API call happened before the Release date. Codes created for such devices get the Unknown status.
  • Link to check code - an example link to be used for code verification.
  • Link to pay - payment link. You can copy the link and paste it into the description of the application on the website where the application is published. A separate link and QR code are generated for each domain (https://pay-to-use.com for all locales, https://pay-to-use.ru for the Russian locale only), available as tabs above the link field. Parameters to be passed:
    • app - the unique identifier of the application. Required parameter.
    • amount - the amount that will be specified in the price field when purchasing. The default price is ignored. However, the amount can't be less than the minimum price and can't be lower than the minimum price set for the application. Optional parameter.

The Link to pay link only becomes publicly accessible once the application is launched. Before that, use the Test payment button below to open the payment form with a signed, temporary access token - the same form and payment methods as the real one, but no money is actually charged: a payment is created directly with the Test status, and a fully working code (if applicable) is generated and emailed immediately, without going through the payment system. Test payments are visible in the Payments list, marked with the Test status, but are excluded from the Balance dashboard totals.

The Test payment button opens a dropdown to choose which domain (https://pay-to-use.com or https://pay-to-use.ru) to open the test payment form on - both are equally functional, the choice only matters if you need to test locale-specific behavior.

To start accepting real payments, use the Run button. Before that, make sure that all the data entered is correct. The keys generated by the application cannot be changed. Once launched, the Test button lets you put the application back into test mode at any time; the Test payment button is then used again to resume testing.

Code verification

Checking the application unlock code is done in 3 steps:

  1. Writing and sending a request for code verification
  2. Checks on the API side
  3. Receiving and processing API response
Sending a request

To verify the code, the user of your application must enter it in the field in the application settings.

/resources/settings/properties.xml
<properties>
	<property id="UnlockCode" type="string"></property>
	<property id="UnlockResult" type="string">Checking...</property>
	...
<properties>
/resources/settings/settings.xml
<settings>
	<setting propertyKey="@Properties.UnlockCode" title="@Strings.UnlockCode">
		<settingConfig type="alphaNumeric" maxLength="12"/>
	</setting>
	<setting propertyKey="@Properties.UnlockResult" title="@Strings.UnlockResult">
		<settingConfig type="alphaNumeric" readonly="true"/>
	</setting>
	...
</settings>

Then you need to send a request to the Pay-to-use API server:

/source/background.mc
function onTemporalEvent() as Void {
	var ds = System.getDeviceSettings();
	return Toybox.Communications.makeWebRequest(
		"https://api.pay-to-use.com", // API URL
		{
			"device" => ds.uniqueIdentifier, // device unique identifier
			"app" => "6", // your Application id
			"model" => ds.partNumber, // device part number
			"code" => Application.Properties.getValue("UnlockCode") // unlock code value in your application
		},
		{
			:method => Communications.HTTP_REQUEST_METHOD_POST,
			:headers => { "Content-Type" => Communications.REQUEST_CONTENT_TYPE_JSON },
			:responseType => Communications.HTTP_RESPONSE_CONTENT_TYPE_JSON
		},
		method(:onReceive)
	);
}

API request parameters:

  • url - https://api.pay-to-use.com. Using HTTPS is mandatory.
  • The body of the request (the values passed). A Dictionary of keys and values:
    • device - unique identifier of the device.
    • app - unique identifier of your application.
    • model - device model identifier. Optional parameter. Data is used to display statistics for new devices.
    • code - unlock code entered by the user in your application settings.
  • Request options:
    • :method - the API supports GET and POST request methods.
    • :headers - for the POST method, parameters need to be passed in JSON format.
    • :responseType - the response is returned in JSON.
  • responseCallback - a link to the callback method, which should accept two arguments:
    • responseCode - the server response header code.
    • data - the content if the request was successful, or null.
Checks on the API side

If no parameters are passed to the API, the API returns a HTTP/1.1 404 Not Found header.

If at least one parameter is passed to the API, the API returns header HTTP/1.1 200 OK.

The server response consists of:

  • response - response code
  • msg - textual description of the response
  • expires - UNIXTIME timestamp (if applicable)

A check is performed to ensure that the application identifier passed in is correct. The application must be in Released status at the time of payment. In case of an error, response code 301 is returned.

If a unique device ID is transmitted, the device ID is searched for and stored. If errors occur when checking or saving, an error code 402 is returned. If such a return code is found, immediately write to support at [email protected]

If the code is passed, the following steps are performed for applications with the Price calculation depending on the term and Term calculation depending on the price calculation methods:

  • If an empty code is transmitted, it is detached from the unique device identifier defined in the previous steps.
  • If a non-empty code is transmitted and it is not activated, the code is activated depending on the conditions of the price specified when the code was purchased, regardless of the date of activation.
  • If no code has been transmitted or if the transmitted code is not found, error code 201 is returned.
  • The activated code is checked against the device and, if a unique device identifier other than the stored one was transmitted during activation, an error code 202 is returned.
  • If the transmitted code has no expiration date and all previous checks have been passed, code 101 is returned.
  • If the code is time limited, a check is performed. If the key is not expired, code 101 is returned. If the code has expired, error code 203 is returned.
  • This type of application requires the code to be bound to the device. If the unique device ID has not been transmitted, error code 304 is returned.

For an app with a Permanent code, only the availability of the code at the time of purchase is checked. If a code is found, code 101 is returned. If no code is found, error code 201 is returned.

For an application with the Donation calculation method, the code is not checked. The code 101 is always returned.

If an empty code is transmitted and the application has a Release date, the beta tester period is checked: if the device first contacted the API before the release date and the Free for beta testers after release period has not yet expired, code 103 is returned.

If the Allow send code back by device ID option is enabled and no code is transmitted, a valid code already linked to the device is searched for. If it is found, code 101 is returned together with the code itself.

If the previous checks have not been passed the test period is checked. If more time has elapsed since the device was first contacted than the current application settings, error code 204 is returned. If the trial period has not yet expired, error code 102 is returned.

If only the application ID is transmitted and neither the unlock code nor the unique device ID is transmitted, error code 303 is returned.

If the response returned is 500, you should write to support at [email protected]

Below is a table of all returned codes:

Return Message
101 Price calculation depending on the term and Term calculation depending on the price calculation methods:
  • Active forever
{
	"response":101,
	"msg":"Active forever",
	"expires":0
}
  • Active until [date]
{
	"response":101,
	"msg":"Active until 11 Nov 2026",
	"expires":1794424642
}
Permanent code:
{
	"response":101,
	"msg":"The code check was successfull",
	"expires":0
}
Donation:
{
	"response":101,
	"msg":"No code check required",
	"expires":0
}
102
{
	"response":102,
	"msg":"Trial period expires in 1d 9h 5m",
	"expires":1791260593
}
103
{
	"response":103,
	"msg":"Free for beta tester until 2 Dec 2026",
	"expires":1796239042
}
201
{
	"response":201,
	"msg":"Code not found"
}
202
{
	"response":202,
	"msg":"Used on the another device"
}
203
{
	"response":203,
	"msg":"Expiration: 10 Sep 2026",
	"expires":1789067842
}
204
{
	"response":204,
	"msg":"Trial period expired"
}
301
{
	"response":301,
	"msg":"Application not found"
}
302
{
	"response":302,
	"msg":"Term undefined"
}
303
{
	"response":303,
	"msg":"Not enough arguments"
}
304
{
	"response":304,
	"msg":"Device is nesessary"
}
401
{
	"response":401,
	"msg":"Error code saving"
}
402
{
	"response":402,
	"msg":"Error device saving"
}
500
{
	"response":500,
	"msg":"Unknown error"
}
Checking the response

Then you should check the response from the Pay-to-use API server:

/source/background.mc
function onReceive(responseHeader, data) as Void {
	if (responseHeader == 200) { Toybox.Background.exit(data); }
}

You can check all headers and codes, you can display your own messages for user convenience, but in the simplest form the verification will look something like this:

/source/app.mc
function onBackgroundData(data) as Void {
	if (data.hasKey("response")) {
		if (data.hasKey("msg")) {
			// You can show data["msg"] in the properties field with the name "UnlockResult".
			Application.Properties.setValue("UnlockResult", data["msg"]);
		}
		if (data["response"].toString().substring(0, 1).equals("2")) {
			// Code verification failed
			// Paid functions are NOT available
			...
		} else {
			// The code check was successful or the error is your fault or the fault of the API
			// Paid functions are available
			...
		}
	}
}

Unlock codes

When you go to this section, a list of unlock codes will open.

Unlock codes list

You can search the email field or the code in the top search bar. The found codes will be displayed in the list. You can use all or part of the email or the code as the search criterion. Matches will be highlighted in color. Search and filters work simultaneously and do not exclude each other.

The last used filter is stored for the user. That is, the next time you enter the page, the last used filter will be applied automatically. Filters are available for the list of unlock codes:

  • Columns - select table columns to display in the unlock code list.
  • Application - display only unlock codes for selected applications.
  • Status - display only unlock codes that are in the selected statuses.

The list of columns in the unlock codes table:

  • Application - your application. You can follow the link to edit its settings.
  • Code - the unlock code.
  • Email - the email address associated with the unlock code registration. This address is used to search for client unlock codes in the My purchases section of the website. This section is accessible to users.
  • Term - the period of validity of the sent code (specified in the application settings). A validity period is set for the code, corresponding to the conditions of the application settings at the time of its creation.
  • Status - the unlock code status. (see Unlock code status)
  • Created - the unlock code creation date.
  • Locale - the language of the user, used for messages with the code.
  • Activation - the activation date of the code. It is set at the moment when this particular user device first contacts the PayToUse API service and submits this code. The status of the code changes to Activated. Only an inactive code can be activated. If an active code is submitted by a device with a different ID, the API returns error 202. Only one device can be linked to a single code.
  • Expiration - the date on which the code activation expires. Set for codes that have a limited validity period on code activation. For codes with unlimited expiration date remains blank.
  • Deleted - the code deletion date. Upon deletion, the code status is set to Unknown.
  • Device - the unique identifier of the device to which the code is linked.
  • Device first call - the date of the first API call from the device. The trial period and the beta tester period are counted from this date.
  • Device last call - the date of the last API call from the device. Allows you to check whether the application is still in use.
  • Payment # - unique sequence number of the payment. You can click on the link to view the details of the payment.
  • Notes - notes entered when the codes were created manually.
  • Buttons for actions with unlock codes. For example, deletion.

Unlock code status

During its lifecycle, the unlock code goes through different states, which can be tracked by the code status.

Status Description
Available The status is assigned to an unlock code for which no actions have been performed or if the device linkage is reset for the code.
Activated The status is set for a code with a set activation date. The activation date is set when the device successfully accesses the PayToUse API service for the first time. Also, when activating the code, the expiration date of the code is set.
Expired The status is set for an expired code. Unlinking the code from the device does not reset the expiration date of the code. Checking the code with this status will return error 203. (see Checks on the API side)
Unknown The status is set when the code is deleted. Checking the code with this status will return error 201. (see Checks on the API side)
Unknown The status is set for a code created for a device whose first API call happened before the application's Release date - a free period is granted to it instead of the usual trial or paid activation, as configured by Free for beta testers after release.
Unknown The status is set for a code shared by several applications grouped together. It is not tied to a single application and does not appear in the codes list of the individual applications in the group.
Unknown The same as Unknown, but the code is no longer available: it has been deleted, or, for a group with a key for only one application, it has already been activated in one of the applications of the group. Deleting the group code also deletes its copies in all applications of the group.
Unknown The status is set for a code belonging to an application inside a group when it is deleted individually, while the group code itself remains.

Code details

Clicking on the code in the list opens the code details page. It shows the same fields as the list, and buttons for actions with the code:

  • Reset - unlinks the code from the device and resets the activation date. The status of the code changes to Available, and the code can be activated on another device, for example, when the user has replaced the device. The expiration date of an already activated code is not reset. The button is not available for applications with temporary codes, because such a code can only be used on one device.
  • Activate - available for a temporary code that has not been paid yet. Enter the user's email and the term of the code: the code is activated for the device to which it is linked, as if it had been paid. Use it, for example, to give the application to the user for free.
  • Send code - sends an email with the code and its details to the email of the code. Select the Message language. If Send copy to developer is checked, a copy of the email is sent to the contact email of the application. Use it when the user has lost the email with the code.
  • Change email - changes the email of the code. For a group code, the email is changed for the group code and all its copies. If the code was received as a result of a payment, the email of the payment is changed as well. The user will then find the code in the My purchases section by the new email.
  • Delete - deletes the code. The status of the code changes to Unknown, and checking the code returns error 201. A temporary code that has not been paid is deleted completely.

Actions with the code are also available on the payment details page if a code was sent for the payment.

Create

The Create button in the title bar of the unlock codes list opens the form for creating codes without payment. For example, for beta testers, reviewers or users who paid in another way. Fields of the form:

  • Email - the address to which the created codes are sent. A copy of the email is sent to the contact email of the application.
  • Application - the application for which the codes are created. Only applications in the Test and Run statuses with the Price calculation depending on the term or Term calculation depending on the price price calculating method are available.
  • Term and Unit of time - the validity period of the codes. It is counted from the moment of activation of the code on the device.
  • Count - the number of codes to create.
  • Notes - arbitrary text saved with the codes. Shown in the Notes column of the list.
  • Include notes in the email - adds the notes to the email with the codes.

The codes are generated according to the code settings of the application (length and character set). After saving, the list of created codes is displayed and the email is sent.

Upload

The Upload button allows you to load codes that were issued outside PayToUse, for example, when moving from another licensing system. Select the application, the file and the file parameters:

  • File format - CSV, code page UTF-8. The maximum file size is shown in the upload form.
  • contains headers - check if the first line of the file contains column names. The first line is then skipped.
  • Delimiter - semicolon, comma or tab.

Columns of the file, in this order:

  1. Code - the unlock code, required. Converted to upper case and truncated to 12 characters. Codes that already exist for the application are skipped.
  2. Email - the email of the user.
  3. Created - the creation date: a date or a UNIXTIME timestamp. If empty, the upload date is used.
  4. Expiration - the expiration date: a date or a UNIXTIME timestamp. Leave empty if the code has not been activated yet or has no expiration date.
  5. Term - the validity period after activation: a number and a unit, for example 12h, 30d, 6m or 1y. If empty, the code is valid forever.

After uploading, the table of loaded rows is displayed. Rows that were not loaded are highlighted in red, and a message shows how many rows were inserted out of the total. Emails are not sent to users when uploading.

Download

The Download button downloads the unlock codes list to a CSV file. In the form, select the fields to include in the file. The file contains all codes that match the current filters and search, not only the codes of the current page. The selected fields are remembered for the next download.

Payments

When you go to this section, a list of user payments will open.

The following payment systems are used to receive payments:

System Description
The payment system fee is from 2.9% + 0.30 USD per each successful card charge. Cards, wallets, and other payment options are supported. The fee depends on the payment method and may differ from the card payment fee. Detailed information about the fees charged by the payment system, you can find on the website of the payment system.
The payment system fee is from 3.4% + 0.30 USD per each successful payment. Cards and PayPal are supported. Detailed information about the fees charged by the payment system, you can find on the website of the payment system.
The payment system fee is from 3.9% for each successful payment. Cards and other payment options are supported. The fee depends on the payment method. Detailed information about the fees charged by the payment system, you can find on the website of the payment system.

After the payment system's fees, PayToUse will charge a 13% fee. We are constantly working to reduce the fees.

If any disputes or refunds arise in the payment system, the penalties of the payment system are reissued to the developer. Therefore you should not allow such situations to occur. PayToUse fee is not charged in controversial situations.

Payments list

You can search the email field or the sent code in the top search bar. The found payments will be displayed in the list. You can use all or part of the email or the sent code as the search criterion. Matches will be highlighted in color. Search and filters work simultaneously and do not exclude each other.

The last used filter is stored for the user. That is, the next time you enter the page, the last used filter will be applied automatically. Filters are available for the list of payments:

  • Columns - select table columns to display in the payment list.
  • Period - display only payments created in the selected date range.
  • Application - displaying payments for selected applications only.
  • System - display payments only from selected payment systems.
  • Status - display payments only with selected statuses.

The list of columns in the payments table:

  • Application - your application. You can follow the link to edit its settings.
  • # - unique sequence number of the payment. It is assigned to the payment automatically when user goes from payment form to payment page in payment system. You can click on the link to view the details of the payment.
  • Comments - message from the user entered in the payment form.
  • System - the payment system selected by the user.
  • Status - the payment status. (see Payment status)
  • Email - user's email indicated in the payment form.
  • Term - the period of validity of the sent code (specified in the application settings).
  • Locale - the language of the payment form selected by the user.
  • Created - the payment creation date.
  • Invoice amount - the amount of payment charged to the user. Specified in the payment form depending on the application settings.
  • Payment date - the payment date.
  • Payment amount - the amount of payment confirmed by the payment system.
  • Sent code - code sent to the user.
  • Available amount - withdrawal amount available.
  • Payout amount - the amount of withdrawn funds for the payment.

Payment details

Clicking the # of a payment in the list opens its details page.

In addition to the fields already listed above, the details page shows:

  • Code - the code entered by the buyer on the payment form, before it is checked and activated. Only shown for applications with temporary codes bound to a device.
  • Payment amount (Gross) - the amount confirmed by the payment system, before payment system and PayToUse fees.
  • Payment amount (Net) - the amount confirmed by the payment system, after payment system and PayToUse fees.
  • Payment identifiers - identifiers assigned by the payment system, used to look up the payment there if needed. The fields shown depend on the payment system:
    • Stripe: Payment intent, Receipt #, Last 4.
    • PayPal: Payment ID, Payer ID, Transaction ID.
    • Robokassa: Payment ID, ID1, ID2.

If a code was sent for the payment, the Reset code, Send code and Change email buttons are available on the payment details page. They work the same way as on the code details page. (see Code details)

Payment status

During its lifecycle, the payment goes to different states, which can be tracked by the payment status.

Status Description
Incomplete The status is assigned to payments for which no actions have been performed. Payment is created as soon as the user switches from the payment form to the payment system form. The payment is assigned a unique serial number, as well as the basic attributes of payment: amount, payment system, date.
Succeeded The status is assigned to payments that received a positive response from the payment system. The next step is to send an email to the user containing the generated code or other data depending on the application settings. If the payment remains in this status, it is necessary to pay special attention to it, as the subsequent actions have not been performed.
Error The status is assigned to payments for which a negative response is received from the payment system. Subsequent steps are not performed. It is necessary to pay special attention to such payments, as the status on the side of the payment system can be processed with a delay.
Pending The status is assigned to payments for which a positive response is received from the payment system, and all subsequent steps have been completed successfully. Withdrawal for payments with this status is not available. Payments move to the next status automatically in 7 days.
Available Withdrawal is available for payments in this status.
Sending The status is enabled for payments included in the next withdrawal. If the withdrawal is canceled or declined, the payment status is returned to Available.
Sent The status is enabled for payments for which the withdrawal is made. Confirmation of receipt of funds is pending.
Completed The status is enabled for payments with successful withdrawals. You can manually set the status by confirming the withdrawal in the corresponding section. The status is also automatically changed 14 days after the payment withdrawal.
Refunded Payments for which a refund has been issued are transferred to this status. Upon issuing a refund, a refund fee is charged. The fee is deducted from the withdrawal amount.
Refund closed A refund that was included in an already sent withdrawal. The refund fee is deducted from the developer's balance instead, since the withdrawn amount can no longer be reduced.
Dispute The buyer has disputed (charged back) the payment with the payment system. The outcome is pending.
Dispute closed The dispute has been resolved. As with a refund, any dispute fee charged by the payment system is passed on to the developer.
Canceled The payment was canceled before it was completed.
Unknown Assigned when reconciling payment records against a report from the payment system whose status text does not match any of the known statuses above. Requires manual review.
Test A test payment made via the application's Test mode while it is in Test status, before it is launched. The amount and any generated code are real, but no money is actually charged and the payment is excluded from the dashboard totals.

Download

The Download button in the title bar of the payments list downloads the list to an Excel file (XLSX). The file contains the columns selected in the Columns filter, in the same order, and all payments that match the current filters and search, not only the payments of the current page.

Withdrawals

When you go to this section, a list of your withdrawals will open.

Withdraw

The "Withdraw" button is used to initiate a request to transfer your earned funds.

When you click this button, a modal window opens where you must specify the payment details for the transfer.

Important note: The system automatically uses the entire available amount shown in the corresponding field for withdrawal. You cannot specify an arbitrary amount lower than the available balance. The total withdrawal amount is the sum of all payments that are in the "available for withdrawal" status.

In the modal window, you can select the amount and currency for withdrawal. The available currencies are determined by your payment methods.

Note: If the selected currency is not supported for the specified withdrawal method, the withdrawal request will be rejected.

Withdrawals list

The last used filter is stored for the user. That is, the next time you enter the page, the last used filter will be applied automatically. Filters are available for the list of withdrawals:

  • Columns - display only selected columns in the withdrawal list.
  • Status - display only withdrawals that are in the selected statuses.

The list of columns in the withdrawals table:

  • # - unique sequence number of the withdrawal. It is assigned to the withdrawal automatically when withdrawal saved. You can click on the link to view the details of the withdrawal.
  • Status - the withdrawal status. (see Withdrawal status)
  • Created - the date of the withdrawal request.
  • Amount - the amount of withdrawal.
  • Withdrawal - the date the withdrawal was sent.
  • Buttons for actions with withdrawals. For example, confirmation.

You can confirm the withdrawal when it is in the Sent status.

Withdrawal details

Clicking the # of a withdrawal in the list opens its details page. In addition to the fields of the list, it shows the Details - the payment details specified in the withdrawal request, to which the funds are transferred.

Below is the list of payments included in the withdrawal. The Columns, Application, System and Status filters are available for it, the same as in the payments list. (see Payments list)

Withdrawal status

During its lifecycle, the withdrawal goes to different states, which can be tracked by the withdrawal status.

Status Description
Pending Status is assigned to withdrawals at creation, for which no actions were performed.
Canceled The status is assigned to cancelled withdrawals. Cancellations can be made for a variety of reasons. For example, the method of receiving funds is not specified. All payments from this withdrawal go to Available status and are available for withdrawal again.
Sent The status is set for the withdrawal of funds when it is sent.
Completed The status is set for manual withdrawal when it is received by the developer to confirm receipt. Or automatically in 14 days after sending.
Refused The status is set for withdrawal when the bank or payment system returns funds after sending. All payments from this withdrawal go to Available status and are available for withdrawal again.

Watch face designer

The designer creates Garmin Connect IQ watch faces for your application without programming. You place elements on the screen of each watch model, choose what they show and which of them are paid, and download a ready file: .prg to install on your own watch for testing or .iq to publish in the Connect IQ Store.

The finished watch face checks the payment through PayToUse by itself, according to the payment method of the application. You do not need to write any code.

The designer is opened with the rocket button next to the application name on the application page.

Connect IQ developer key

Every .prg and .iq file is signed with the developer key, an RSA 4096-bit private key. It is set once in the Profile and is used for all watch faces of the developer.

  • If you already have apps in the Connect IQ Store, upload the key you signed them with: the developer_key file created by the Connect IQ SDK (for example, with the "Monkey C: Generate a Developer Key" command in Visual Studio Code). An app published in the store can be updated only with the same key.
  • If you do not have a key yet, generate it with the "Generate new key" button. Such a key is suitable for installing watch faces on your watch and for new apps in the store, but apps already published with another key cannot be updated with it.
  • Download the key and keep a copy in a safe place. If the key is lost, apps published with it can no longer be updated in the store.
  • Files in DER or PEM format are accepted. The key must not be protected with a password.

Important: replacing the key affects all watch faces of the developer. The previous key is kept on the server, but new builds are signed with the new one.

Watch models

The list of models available in the designer is set by the administrator on the Watch models page: round and rectangular models with Connect IQ 4 and newer. In the designer, select the models for the watch face with the Models button.

Each model has its own layout: the position, size and font of the elements are set separately, while the element list, the functions and the payment settings are common to all models. A newly added model gets the layout of the current model scaled to its screen.

  • Watch / Screen - show the screen on the picture of the watch or only the screen.
  • Real size - show the watch in its physical size.
  • Always On - preview of the Always On mode of AMOLED screens.

Elements

A watch face consists of elements of four types:

  • Text - shows the value of a function: time, date, steps, heart rate, weather and so on.
  • Static text - text that you enter yourself.
  • Hands - analog hour, minute and second hands.
  • Image - a picture: a background or a layer above other elements.

Elements are drawn in the order of the list on the Elements tab: the first one is the bottom layer. The order is changed with the arrows in the list and the To back and To front buttons.

Elements are moved with the mouse or with the arrow keys (1 px, with Shift - 10 px). Ctrl+D duplicates the element, Ctrl+C / Ctrl+V copy its position to another model, Delete deletes it. The Copy to all models button transfers the position of the element to all selected models.

Functions and payment

A text element can have several functions. One of them is shown by default; if User can choose the function in settings is enabled, the user of the watch chooses the function in the watch face settings in Garmin Connect.

Each function of each element can be marked as paid: the same function can be free in one element and paid in another. The Functions tab shows all used functions and elements in one table.

Functions marked with an asterisk require an additional permission (sensor history or user profile), which the store shows when installing the watch face. The permission is added to the watch face only if it uses such functions.

Without payment the watch face behaves according to the payment method of the application:

Payment method Without payment
Price calculation depending on the term, Term calculation depending on the price, Permanent code Paid functions show "paid", paid images are hidden. The unlock code is entered in the watch face settings; the QR code of the purchase page is in the settings menu on the watch.
Temporary code with price depending on the term, Temporary code with term depending on the price If the watch face uses paid functions, it shows a lock screen with the code of the watch and the QR code of the payment page.
Donation There is no payment check, paid flags are ignored.

On touch screens a tap on a locked watch face opens all functions for 15 minutes as a trial.

Fonts and images

  • System fonts of the watch are available for every model. Number fonts contain only digits and a few symbols.
  • Your own TTF or OTF fonts are uploaded on the Watch face tab and converted to bitmaps for each model and size, up to 8 sizes per model.
  • Images (PNG, JPEG, GIF, WebP up to 2000×2000) are uploaded on the same tab. An image either fills the screen of any model or has its own size; it is scaled for each model, transparency is kept. Up to 8 different images or sizes per model.
  • Images take graphics memory of the watch; the designer shows how much of it is used on the current model.

Always On mode

On AMOLED screens in Always On mode the watch face shows only the elements with the Show in Always On mode flag, on a black background and with a small shift every minute to protect the screen. Garmin allows no more than 10% of lit pixels in this mode; the designer shows this value above the screen. Seconds and the second hand are not shown in this mode.

Building

  • Build .prg - a file for the current model to install on your watch.
  • Build .iq - a package for all selected models to publish in the Connect IQ Store. Each .iq build gets a new version number.

Builds are queued and usually take about a minute. The Builds tab shows the status, the download link and the build log.

The App UUID on the Watch face tab identifies the app in the store. Do not change it between versions. To update an app that is already published, enter its UUID.

Installing a .prg file on the watch

Connect the watch to the computer with the USB cable and copy the .prg file to the GARMIN/Apps folder of the watch. After you disconnect the cable, the watch face appears in the list of watch faces on the watch.

  • Windows: the watch appears in File Explorer as a device (for example, "fēnix 7"). Open Internal Storage → GARMIN → Apps and copy the file there.
  • macOS: most modern watches connect via MTP, which macOS does not support without extra software. Install OpenMTP (free), connect the watch, open GARMIN/Apps and copy the file there. Close Garmin Express before that, otherwise it takes over the connection.
  • Linux: the watch appears in the file manager (GNOME Files, Dolphin) as an MTP device; open GARMIN/Apps and copy the file there. Without a graphical environment the watch can be mounted with jmtpfs or simple-mtpfs.

To remove the watch face, delete the file from GARMIN/Apps or remove it on the watch.

Note: the settings of a watch face installed this way cannot be changed in the Garmin Connect app, it uses the default settings. To test the settings, publish the watch face in the store as a beta app.

Publishing in the Connect IQ Store

The designer does not upload files to the store. Log in to the Connect IQ developer dashboard (apps.garmin.com/developer), create an app of the "watch face" type, upload the .iq file, add a description and screenshots and submit the app for review.

To update the app, build a new .iq file (its version increases automatically) and upload it as a new version of the same app. The UUID and the developer key must stay the same.

API

Overview

API PayToUse performs the following functions:

  1. Checks the activation status of an unlock code and activates it if necessary.
  2. Retrieves blood glucose data from the NightScout app.
  3. Retrieves current weather data for a specified location.

All information can be requested and returned in a single request.

API Endpoints

You can use one of the following endpoints:

  • https://api.pay-to-use.com
  • https://api.p2u.io

Both endpoints handle GET and POST requests.

Request Parameters

  • device: string (required) — unique device identifier
  • app: integer (required) — your Application ID
  • model: string (optional) — device model code, needed for collecting and displaying statistics for devices using the app
  • code: string (optional) — unlock code
  • bg: associative array (optional) — data for requesting blood glucose levels from the NightScout app
    • url: string (optional) — address of the NightScout app
  • weather: associative array (optional) — data for requesting current weather
    • appid: string (optional) — weather API access key
    • lat: float (optional) — latitude
    • lon: float (optional) — longitude
    • provider: integer (optional) — weather provider

List of Supported Weather Providers

1. OpenWeatherMap

  • Description: OpenWeatherMap provides global weather data, including real-time weather, historical data, and 16-day forecasts. With wide geographic coverage and frequent updates, OpenWeatherMap is a popular choice for applications requiring both current weather and extended forecasts.
  • Data Provided: Real-time temperature, humidity, wind speed, air quality, precipitation probability, and more. Offers both current and forecast data, including minute-by-minute weather data for select locations.
  • Provider Selection: Include provider = 1 in the weather section of your request to select OpenWeatherMap as the weather provider.
  • Usage Notes: Offers free and paid tiers, with data accessible via API key authentication. Advanced data layers and premium features are available in paid plans.
  • API Documentation: Available here.

2. QWeather

  • Description: QWeather, also known as HeWeather, provides comprehensive weather data focused on China but includes international data as well. It offers extensive details such as real-time weather, forecasts, air quality information, and alerts.
  • Data Provided: Current temperature, humidity, UV index, pollution levels, daily and hourly forecasts, as well as warnings for severe weather conditions. Known for its granular air quality data and its real-time updates on changing weather conditions.
  • Provider Selection: Include provider = 2 in the weather section of your request to select QWeather as the weather provider.
  • Usage Notes: QWeather offers API access with free and premium tiers. The free tier provides limited data, while premium options expand to cover additional data points and locations.
  • API Documentation: Available here.

3. MET Weather (MET Norway)

  • Description: The MET Weather API, provided by MET Norway, gives access to a variety of open meteorological data, including forecasts, historical data, and specific data for Norway and the Nordic regions. Known for its accuracy and transparency, MET Weather is ideal for applications in need of highly reliable weather data.
  • Data Provided: Current weather conditions, forecasts, precipitation, temperature, wind data, and UV index. MET Weather offers specialized data for the Nordic regions but also supports global weather information.
  • Provider Selection: Include provider = 3 in the weather section of your request to select MET Weather as the weather provider.
  • Usage Notes: All data provided by MET Weather is freely available for use under a Creative Commons license, allowing both non-commercial and commercial applications without cost. MET Norway is renowned for its environmental data, making it a trusted provider, particularly in Europe.
  • API Documentation: Available here.

Example Request

/source/background.mc
function onTemporalEvent() as Void {
	var ds = System.getDeviceSettings();
	if (!ds.phoneConnected) { // Checks that the device is connected to the phone for sending the request
		return;
	}

	var id = ds.uniqueIdentifier;
	if (id == null) { // Verifies that the device has been assigned a unique identifier
		return;
	}

	var request = {};

	var lockCheck = Application.Storage.getValue("LastCodeCheckTimestamp");
	if (lockCheck == null || lockCheck <= Time.now().value()) { // Sends the code if necessary
		request.put("code", Application.Properties.getValue("UnlockCode"));
	}

	var ns_url = Application.Properties.getValue("NS");
	if (!ns_url.equals("")) { // Sends the NightScout app URL if needed
		request.put("bg", { "url" => ns_url });
	}

	var wP = Application.Properties.getValue("Weather");
	if (wP != 0) { // Sends weather request parameters if needed
		var lat = Application.Properties.getValue("latitude");
		var lon = Application.Properties.getValue("longitude");
		if (!lat.equals("") && !lon.equals("")) {
			request.put("weather", {
				"appid" => Application.Properties.getValue("appID"),
				"lat" => lat,
				"lon" => lon,
				"provider" => wP
			});
		}
	}

	if (!request.isEmpty()) {

		// Fills in the required request parameters
		request.put("device", id);
		request.put("app", p2uAppID); // your Application id
		request.put("model", ds.partNumber);

		Toybox.Communications.makeWebRequest(
			"https://api.p2u.io", // API Endpoint
			request,
			{
				:method => 3, // Communications.HTTP_REQUEST_METHOD_POST
				:headers => {
					"Content-Type" => 1 // Communications.REQUEST_CONTENT_TYPE_JSON
				},
				:responseType => 0 // Communications.HTTP_RESPONSE_CONTENT_TYPE_JSON
			},
			method(:onReceive)
		);
	}
}

API Response

The API returns a JSON object with information on unlock status, glucose level, and weather.

Response Parameters

Unlock Code Verification Results (if a request was sent):

  • response: integer — return code
  • msg: string — message about the verification result
  • code: string — the unlock code the result refers to, if it is known
  • expires: integer — expiration timestamp of the code in UNIXTIMESTAMP format
  • qr: array — QR code for purchase or serial number verification, if applicable

NightScout App Response (if a request was sent):

  • bg: associative array — formatted response from the NightScout app
    • value: integer — blood glucose level in mg/dL
    • date: integer — timestamp of the code expiration in UNIXTIMESTAMP format
    • direction: string — trend in blood glucose level change

Weather API Response (if a request was sent):

  • weather: associative array — formatted response from the Weather API
    • provider: integer — weather provider identifier
    • weather: array — current weather conditions. May return one or two values; if two values are returned, they represent day and night conditions
    • temp: float — current temperature in Celsius
    • feels_like: float — feels-like temperature in Celsius
      Not available for MET Weather.
    • pressure: integer — atmospheric pressure in hPa
    • humidity: integer — humidity in %
    • precipitation: integer — precipitation probability in %
      Not available for MET Weather.
    • wind: integer — wind direction in degrees
    • wind_speed: float — wind speed in m/s
    • temp_low: float — today’s low temperature in Celsius
    • temp_high: float — today’s high temperature in Celsius
    • sunrise_today: integer — today’s sunrise timestamp in UNIXTIMESTAMP format
    • sunset_today: integer — today’s sunset timestamp in UNIXTIMESTAMP format
    • sunrise_tomorrow: integer — tomorrow’s sunrise timestamp in UNIXTIMESTAMP format
    • sunset_tomorrow: integer — tomorrow’s sunset timestamp in UNIXTIMESTAMP format
    • aqi: associative array — air quality index
      • level: integer — air quality index level
      • value: integer — air quality index value

Example Response

https://api.p2u.io
{
	"response": 103,
	"msg": "Free for beta tester",
	"expires": 0,
	"qr": [
		"11111110111011010110101111111",
		"10000010111001001101001000001",
		"10111010101100110110101011101",
		"10111010110101000001001011101",
		"10111010000001010100001011101",
		"10000010100110001101001000001",
		"11111110101010101010101111111",
		"00000000010010110111100000000",
		"11001110000100100100100101111",
		"11111100011011011010011111111",
		"01111011100111111100101000001",
		"01111100101100110111011011011",
		"00110110101010100101110000010",
		"11001000010001011000001011111",
		"01101010001001110100000001101",
		"10111101100010100101100110011",
		"01010111111100110100100100010",
		"10000100111011011000101111011",
		"00000110110110110100100000101",
		"00111100011100001100101100011",
		"11110111110010100111111111001",
		"00000000111001011101100010001",
		"11111110010001011111101011101",
		"10000010100010100111100010010",
		"10111010101101100111111111001",
		"10111010010010110000010000001",
		"10111010001111111110000001111",
		"10000010111101011111101101011",
		"11111110100011011110110010010"
	],
	"bg": {
		"value": -102,
		"date": 1730546101,
		"direction": ""
	},
	"weather": {
		"provider": 1,
		"weather": [
			89
		],
		"temp": 0.27,
		"feels_like": -3.14,
		"pressure": 999,
		"humidity": 78,
		"precipitation": 0,
		"wind": 120,
		"wind_speed": 2.96,
		"temp_low": -3.8,
		"temp_high": 0.27,
		"sunrise_today": 1730527969,
		"sunset_today": 1730551770,
		"sunrise_tomorrow": 1730614492,
		"sunset_tomorrow": 1730638051,
		"aqi": {
			"level": 1,
			"value": 38
		}
	}
}

Response codes

The response field of the unlock code verification result takes one of the following values. Response examples and the order of the checks are described in Checks on the API side.

Return Description
101The code is valid. The application can be unlocked.
102No valid code, but the trial period has not expired yet. The application can be unlocked until the date in the expires field.
103No valid code, but the device is a beta tester: its first API call happened before the application's Release date. The application can be unlocked until the date in the expires field (0 - without limit).
201The code is not found or has been deleted.
202The code is already activated on another device.
203The code has expired.
204The trial period has expired and no valid code was sent.
301The application is not found or is not available.
302The term of the code is not defined.
303Not enough parameters in the request.
304The device identifier is required for this application.
401Error saving the code. Write to support at [email protected].
402Error saving the device. Write to support at [email protected].
500Unknown error. Write to support at [email protected].

Codes 1xx mean that the application can be unlocked, 2xx - that it must stay locked, 3xx - an error in the request, 4xx and 5xx - an error on the PayToUse side. In case of 4xx and 5xx errors, it is recommended to keep the last successful result and repeat the request later.

If the Allow send code back by device ID option is enabled in the application settings, the request contains a device identifier but no code, and a valid code is already linked to this device, the API returns 101 together with this code in the code field. The application can save it and no longer ask the user to enter it.

Notes

  • Requests with bg require a connection to the NightScout app.
  • For every request with a code, the API automatically checks the code status and activates it if inactive.
  • Please note that API parameters may be updated or modified over time to improve functionality, compatibility, and security. It is recommended to periodically review the API documentation for any changes that might affect integration or usage.

Weather providers

Below is the correspondence between the weather conditions returned in the weather field and the values of each provider.

Garmin

For a detailed description of Garmin SDK weather functions and constants, refer to this link. You may store values obtained from the API or results from Garmin SDK weather functions, depending on the selected weather provider, to ensure consistency in displaying values on the screen.

ID Description Day Night
0 Clear
0x53

0x54
40 Fair
23 Mostly clear
0x55

0x56
1 Partly cloudy
0x57

0x58
22 Partly clear
2 Mostly cloudy
0x59
52 Thin clouds
20 Cloudy
0x5A
45 Cloudy chance of rain
31 Drizzle
0x3E
14 Light rain
0x42
24 Light showers
3 Rain
0x43
25 Showers
27 Chance of showers
0x46
11 Scattered showers
15 Heavy rain
26 Heavy showers
28 Chance of thunderstorms
0x36

0x37
12 Scattered thunderstorms
0x38
6 Thunderstorms
0x39
8 Fog
0x4E
9 Hazy
29 Mist
39 Haze
30 Dust
0x4F
35 Sand
33 Smoke
38 Volcanic ash
37 Sandstorm
13 Unknown precipitation
5 Windy
0x52
36 Squall
48 Flurries
32 Tornado
0x50
41 Hurricane
42 Tropical storm
50 Sleet
0x45
7 Wintry mix
18 Light rain snow
19 Heavy rain snow
21 Rain snow
49 Freezing rain
44 Chance of rain snow
47 Cloudy chance of rain snow
34 Ice
51 Ice snow
43 Chance of snow
0x4C

0x4D
16 Light snow
46 Cloudy chance of snow
0x4A
4 Snow
17 Heavy snow
0x4B
10 Hail
0x3A

Open Weather Map

Check out the icon set for OpenWeatherMap as an example here.

ID Description Day Night
2xx Thunderstorm
200 Thunderstorm with light rain
0x36

0x37
201 Thunderstorm with rain
0x38
202 Thunderstorm with heavy rain
210 Light thunderstorm
211 Thunderstorm
0x39
212 Heavy thunderstorm
0x3B
221 Ragged thunderstorm
230 Thunderstorm with light drizzle
0x3A
231 Thunderstorm with drizzle
232 Thunderstorm with heavy drizzle
3xx Drizzle
300 Light intensity drizzle
0x3C

0x3D
301 Drizzle
0x3E
302 Heavy intensity drizzle
0x3F
310 Light intensity drizzle rain
0x40
311 Drizzle rain
312 Heavy intensity drizzle rain
0x41
313 Shower rain and drizzle
314 Heavy shower rain and drizzle
321 Shower drizzle
5xx Rain
500 Light rain
0x42
501 Moderate rain
0x43
502 Heavy intensity rain
0x44
503 Very heavy rain
504 Extreme rain
511 Freezing rain
0x45
520 Light intensity shower rain
0x46
521 Shower rain
522 Heavy intensity shower rain
531 Ragged shower rain
6xx Snow
600 Light snow
0x4C

0x4D
601 Snow
0x4A
602 Heavy snow
611 Sleet
0x45
612 Light shower sleet
613 Shower sleet
615 Light rain and snow
616 Rain and snow
620 Light shower snow
0x4B
621 Shower snow
622 Heavy shower snow
7xx Atmosphere
701 Mist
0x4E
711 Smoke
0x4F
721 Haze
731 Sand/ dust whirls
741 Fog
751 Sand
0x4F
761 Dust
762 Volcanic ash
771 Squalls
0x52
781 Tornado
0x50
800 Clear
800 Clear sky
0x53

0x54
80x Clouds
801 Few clouds 11-25%
0x55

0x56
802 Scattered clouds 25-50%
0x57

0x58
803 Broken clouds 51-84%
0x59
804 Overcast clouds 85-100%
0x5A

QWeather

You can check out the original set of weather icons by clicking here

ID Description Day Night
302 Thundershower
0x36

0x37
303 Heavy Thunderstorm
0x38
310 Rainstorm
0x39
317 Rainstorm to Heavy Rainstorm
304 Hail
0x3A
311 Heavy Rainstorm
0x3B
312 Severe Rainstorm
318 Heavy to Severe Rainstorm
309 Drizzle Rain
0x3C

0x3D
404 Sleet
0x3E
305 Light Rain
0x42
314 Light to Moderate Rain
306 Moderate Rain
0x43
315 Moderate to Heavy Rain
399 Rain
308 Extreme Rain
0x44
316 Heavy Rain to Rainstorm
313 Freezing Rain
0x45
405 Rain and Snow
300 Shower Rain
0x46
301 Heavy Shower Rain
307 Heavy Rain
350 Shower Rain
351 Heavy Shower Rain
400 Light Snow
0x4C

0x4D
408 Light to Moderate Snow
499 Snow
401 Moderate Snow
0x4A
402 Heavy Snow
409 Moderate to Heavy Snow
410 Heavy Snow to Snowstorm
403 Snowstorm
0x4B
406 Shower Rain and Snow
407 Snow Flurry
456 Shower Rain and Snow
457 Snow Flurry
503 Sand
0x4E
504 Dust
507 Duststorm
508 Sandstorm
511 Moderate Haze
512 Heavy Haze
513 Severe Haze
500 Mist
0x4F
501 Fog
502 Haze
509 Dense Fog
510 Strong Fog
514 Heavy Fog
515 Extra Heavy Fog
100 Sunny
0x53

0x54
150 Clear
101 Cloudy
0x55

0x56
151 Cloudy
102 Few Clouds
0x57

0x58
152 Few Clouds
103 Partly Cloudy
0x59
153 Partly Cloudy
104 Overcast
0x5A

MET Weather

Check out the icon set for MET Weather as an example here.

ID Description Day Night
lightrainshowers Light rain showers
0x36

0x37
lightrainshowersandthunder Light rain showers and thunder
rainshowersandthunder Rain showers and thunder
heavyrainshowersandthunder Heavy rain showers and thunder
heavyrainandthunder Heavy rain and thunder
0x38
rainandthunder Rain and thunder
lightrainandthunder Light rain and thunder
0x39
heavysleetandthunder Heavy sleet and thunder
0x3B
lightsleetandthunder Light sleet and thunder
0x3A
lightssleetshowersandthunder Light sleet showers and thunder
sleetandthunder Sleet and thunder
lightsleetshowers Light sleet showers
0x3C

0x3D
sleetshowers Sleet showers
sleetshowersandthunder Sleet showers and thunder
heavysleetshowers Heavy sleet showers
heavysleetshowersandthunder Heavy sleet showers and thunder
lightsleet Light sleet
0x3E
sleet Sleet
0x3F
heavysleet Heavy sleet
0x45
lightrain Light rain
0x42
rain Rain
0x43
heavyrain Heavy rain
0x44
rainshowers Rain showers
0x46
heavyrainshowers Heavy rain showers
heavysnow Heavy snow
0x4B
heavysnowandthunder Heavy snow and thunder
snow Snow
snowandthunder Snow and thunder
lightsnowshowers Light snow showers
0x4C

0x4D
lightssnowshowersandthunder Light snow showers and thunder
snowshowers Snow showers
snowshowersandthunder Snow showers and thunder
heavysnowshowers Heavy snow showers
heavysnowshowersandthunder Heavy snow showers and thunder
lightsnow Light snow
0x4A
lightsnowandthunder Light snow and thunder
fog Fog
0x4F
clearsky Clear sky
0x53

0x54
fair Fair
0x55

0x56
partlycloudy Partly cloudy
0x57

0x58
cloudy Cloudy
0x59