Overview
The Mellow API serves to integrate Mellow into your project. This API documentation gives developers a detailed description of all the available requests.
General Information
The Mellow API includes methods for working with tasks and freelancers. After registering as your company's administrator, you can invite and create freelancers, manage tasks, and initiate withdrawals to freelancers' payment methods.
The Quickstart presents the most popular use case for the API.
The API is based on a set of HTTP methods that are used to make requests and receive responses for each operation. All responses are returned in JSON format. You can use any tools and languages to work with the API. In this guide, we use PHP to show the workings of the API.
For developers' convenience, Mellow provides a sandbox to test things out before deploying to production. To make use of the sandbox, contact the Mellow sales department.
Base URL
The current API version is v2
. All URLs to API endpoints in this documentation include the following base URL:
https://my.mellow.io/api
In the header of every request, you need to pass Accept: application/json
.
Authentication and Authorization
Authentication is performed using JSON Web Tokens. After receiving a JWT, you need to pass it in the request header: Authorization: Bearer TOKEN_HERE
.
If you have several companies, you can pass the x-company-id
parameter in the request header. In this case, you can simultaneously make requests for all the companies without updating the token, instead just passing a company ID in each request.
The authentication process looks as follows:
JWT Request
Sample request
curl --location \
--request POST 'https://my.mellow.io/api/login' \
--data-raw '{
"username": "Ivan",
"password": "123123",
"code": 0
}'
Sample response If the code parameter was passed correctly or the user does not have two-factor authentication enabled:
HTTP status 200 OK
{
"token": "eyJhbGciOiJIUzUxMiIsI...",
"refreshToken": "c84f18a2-c6c7-4850-be15-93f9cbaef3b3"
}
If the code parameter was not passed and the user has two-factor authentication enabled:
HTTP status 200 OK
{
"2FA": {
"type": "SMS" | "Google",
"number": "+8279823472"
}
}
This request allows you to obtain a JWT, which is used for authenticating all other requests.
Request
HTTP Request
https://my.mellow.io/api/login
Parameters
Parameter Name | Type | Required | Description |
---|---|---|---|
username |
string |
Yes | Username |
password |
string |
Yes | Password |
code |
string |
No | Two-factor authentication code. Depending on the user's account settings:
|
Response
Property Name | Type | Description |
---|---|---|
token |
string |
JWT token |
refreshToken |
string |
JWT token used for token update, valid for 65 days |
JWT Update
Sample request
curl --location \
--request POST 'https://my.mellow.io/api/token/refresh' \
--data-raw '{
"refreshToken": "c84f18a2-c6c7-4850-be15-93f9cbaef3b3"
}'
Sample response
HTTP status 200 OK
{
"token": "eyJhbGciOiJIUzUxMiIsI...",
"refreshToken": "c84f18a2-c6c7-4850-be15-93f9cbaef3b3"
}
This request allows you to obtain an updated JWT, which is used for authenticating all other requests.
Request
HTTP Request
https://my.mellow.io/api/token/refresh
Parameters
Parameter Name | Type | Required | Description |
---|---|---|---|
refreshToken |
string |
Yes | JWT token |
Response
Property Name | Type | Description |
---|---|---|
token |
string |
JWT token |
refreshToken |
string |
JWT token used for token update, valid for 65 days |
API Response
All responses from the API are formatted as JSON
.
Error Codes and Their Descriptions
Below are all the possible response status codes.
HTTP Code | Type | Description |
---|---|---|
200 | Success | The request succeeded |
401 | Error: Unauthorized | Invalid authentication data |
403 | Forbidden | Access denied, authorization error |
422 | Validation Error | Request can't be processed due to a validation error. Details of the error are provided in the response payload as {fieldName: errorText} |
409 | Error While Executing Request | Error during request execution. Details are provided in the response payload as {"error description"} |
Quickstart
The quickstart guide serves as an introduction to the Mellow API and contains instructions for the most common actions in the system:
Before You Begin
Authentication
Authentication is performed using JSON Web Tokens (JWTs). After receiving a JWT, you need to pass it in the request header: Authorization: Bearer TOKEN_HERE
.
To have a JWT generated, you need to send a JWT request where you pass the username, password, and, if necessary, a 2FA code.
The request's method and URI: POST https://my.mellow.io/api/login
Note: For the test environment, use:
POST https://demo.mellow.io/api/login
The JWT you receive has a lifespan of 65 days. After this period, you will need to generate a new token by repeating the authentication process. The token must be passed in the header of all further requests.
To learn more, see Authentication and Authorization.
API Use Cases
The main scenarios of using the API depend on the way you interact with freelancers:
- Your contractors can sign up for Mellow and perform basic operations there.
- Your contractors are not going to create Mellow accounts, and you will send payments to them yourself.
If your freelancers are going to sign up for and use Mellow, the recommended steps are as follows:
- Find or invite a freelancer. The freelancer will receive an invite email with a sign-up link. To check the sign-up status, do a freelancer search request with a filter by email: users who have completed and confirmed their registration will have the isRegistered parameter as "true". Next, the freelancer needs to get verified.
- Create a new task.
- The freelancer confirms and completes the task.
- Accept the task.
- Pay for the task. The payment amount is debited from the client's balance and credited to the freelancer's balance.
If your freelancers are not going to use Mellow independently (change task statuses, add payment methods, or withdraw task payment), then the recommended steps are as follows:
- Find or invite a freelancer.
- Create a new task.
- Change task statuses in sequence: "Accepted by freelancer", "Completed".
- Accept the task.
- Pay for the task.
- Retrieve a freelancer's payment method or add a new one. Only a freelancer can add a new payment method. To add a payment method, you need to send a confirmation code to the freelancer and then generate a link to the screen where the freelancer can input the payment details.
- Create a payout to a freelancer's payment method for a task that's been paid.
Inviting Freelancers
To add a freelancer to your team, call the invite freelancer request.
The request's method and URI: POST https://my.mellow.io/api/customer/freelancers
A successful request returns an empty response with code 200.
Creating Tasks
To create a task, use this request, passing all the required task parameters: category, attributes, name, description, and price.
The request's method and URI: POST https://my.mellow.io/api/tasks
A successful request returns an empty response with code 200.
Changing Task Statuses
The stages of a task are as follows:
- Create a task
- Start the task
- Complete the task
- Accept/reject task results
- Pay for the task
When using the API, you need to have these stages performed sequentially. Paying for a task is done via a separate request (payment is only made to a freelancer's balance). All other status transitions are handled using the change task status request. In other words, when making a request, you need to observe the sequence with the following statuses:
- Start task (
ID=2
) - Complete task (
ID=3
) - Accept task results (
ID=4
)
The request's method and URI: PUT https://my.mellow.io/api/customer/tasks/{taskId||uuid}
A successful request returns an empty response with code 200.
Task Payment
To pay for a task, you only need to provide a task ID in this request.
The request's method and URI: POST https://my.mellow.io/api/customer/tasks/pay
A successful request returns an empty response with code 200.
Tasks
The API includes a number of requests for task management.
Task Statuses
These are task statuses available in Mellow (the diagram features only the main ones, see the complete list of statuses in the table below):
Status | ID | Description | Initiated by |
---|---|---|---|
Unconfirmed |
ID=1 |
Task created | Customer |
In progress |
ID=2 |
Freelancer has accepted the task to work on it | Freelancer |
Pending review |
ID=3 |
Freelancer has completed the task, and it is awaiting customer review | Freelancer |
Pending payment |
ID=4 |
Task accepted by customer and is awaiting payment | Customer |
Completed |
ID=5 |
Task has been paid for | Customer |
Rejected by freelancer |
ID=6 |
Freelancer has rejected the task | Freelancer |
Rejected by customer |
ID=8 |
Customer has rejected the task completed by the freelancer | Customer |
Awaiting freelancer’s confirmation of cancellation |
ID=11 |
Customer has rejected the task, pending freelancer’s confirmation of cancellation | Customer |
Queued for payment |
ID=12 |
Customer has initiated payment, but payment is still in process. Once processed, the task status will automatically change to Completed (ID=5 ). If the task remains in this status for too long, please contact support |
Customer |
Dispute initiated |
ID=13 |
Freelancer has clicked Dispute Task and is awaiting a response from the customer | Freelancer |
Customer review required |
ID=14 |
If the freelancer did not complete the task by the deadline, the customer must choose whether to extend the deadline or cancel the task | Automatically upon reaching the deadline |
Changes under review |
ID=16 |
Customer has proposed changes to task parameters and is awaiting freelancer’s response | Customer |
Task Management
This section includes requests for retrieving, creating tasks, and changing task status.
Retrieving Task List
Sample request
curl -X GET "https://my.mellow.io/api/customer/tasks?filter[creatorId]=123"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
Sample response
HTTP status code: 200 OK
{
"items": [
{
"additionalAttributes": null,
"category": {
"id": 20,
"title": "Управление размещением медийной рекламы",
"titleEn": "ATL advertising management",
"titleDoc": "Услуги по управлению размещением рекламных материалов на интернет сайтах",
"titleDocEn": "Services on managing advertising materials' placement at websites"
},
"parentCategory": {
"id": 2,
"title": "Интернет-реклама",
"titleEn": "Internet advertising"
},
"commissionAmount": 7.29,
"commissionPercent": 9,
"copyright": false,
"createType": "API",
"currency": {
"currency": "EUR",
"id": 3
},
"customer": {
"id": 2955,
"title": "Olimp LLC"
},
"creator": {
"id": 100740,
"fullName": "Ivan Petrov"
},
"worker": {
"id": 100871,
"email": "[email protected]",
"firstName": "Nina",
"lastName": "Malina",
"isVerified": true
},
"dateCreated": "2021-08-06 11:17:13",
"dateAccepted": null,
"dateEnd": "2021-08-07 14:17:13",
"dateFinished": null,
"datePaid": "2021-08-06 14:17:13",
"datePayAt": null,
"documentDate": "2021-08-06 14:17:13",
"description": "Task related to social media analysis",
"uuid": "123e4567-e89b-12d3-a456-426655440000",
"files": [
{
"id": 252479,
"name": "analysis_report.pdf",
"typeId": 5,
"ownerId": 100556
}
],
"id": 583689,
"needReport": false,
"price": 150,
"state": 5,
"title": "Freelancer Thailand Project",
"deadline": {
"type": 0,
"triggerDate": null,
"isComingUp": false
},
"hold": {
"type": "without_hold",
"isActive": false
},
"insurance": {
"status": 0
},
"group": {
"id": 654,
"title": "Market Analysis Group"
},
"messageCount": 0,
"activeDispute": null,
"activeChangesetId": null
}
]
"pagination": {
"count": 20,
"total": 102,
"perPage": 20,
"page": 1,
"pages": 6
}
}
This method is used to search tasks using various filters.
Request
HTTP Request
Parameters
Parameter | Type | Required | Description |
---|---|---|---|
filter[creatorId] |
integer |
No | ID of the user who created the task |
filter[workerId] |
integer |
No | Contractor ID. To retrieve a list of freelancers, use this request |
filter[companyId] |
integer |
No | Company ID. For a list of companies, refer to this request |
filter[dateCreatedFrom] |
string |
No | Task creation date (start of range). Format: YYYY-MM-DD (e.g., 2020-09-03 ), with time defaulting to 00:00:00 |
filter[dateCreatedTo] |
string |
No | Task creation date (end of range). Format: YYYY-MM-DD (e.g., 2020-09-03 ), with time defaulting to 23:59:59 |
filter[dateEndFrom] |
string |
No | Task deadline (start of range). Format: YYYY-MM-DD (e.g., 2020-09-03 ), with time defaulting to 00:00:00 |
filter[dateEndTo] |
string |
No | Task deadline (end of range). Format: YYYY-MM-DD (e.g., 2020-09-03 ), with time defaulting to 23:59:59 |
filter[dateFinishedFrom] |
string |
No | Task completion date (start of range). Format: YYYY-MM-DD (e.g., 2020-09-03 ), with time defaulting to 00:00:00 |
filter[dateFinishedTo] |
string |
No | Task completion date (end of range). Format: YYYY-MM-DD (e.g., 2020-09-03 ), with time defaulting to 23:59:59 |
filter[dateReportFrom] |
string |
No | Certificate generation date (start of range). Format: YYYY-MM-DD (e.g., 2020-09-03 ), with time defaulting to 00:00:00 |
filter[dateReportTo] |
string |
No | Certificate generation date (end of range). Format: YYYY-MM-DD (e.g., 2020-09-03 ), with time defaulting to 23:59:59 |
filter[dateAcceptedFrom] |
string |
No | Date when the client accepts the task (start of range). Format: YYYY-MM-DD (e.g., 2020-09-03 ), with time defaulting to 00:00:00 |
filter[dateAcceptedTo] |
string |
No | Date when the client accepts the task (end of range). Format: YYYY-MM-DD (e.g., 2020-09-03 ), with time defaulting to 23:59:59 |
filter[datePaidFrom] |
string |
No | Task payment date (start of range). Format: YYYY-MM-DD (e.g., 2020-09-03 ), with time defaulting to 00:00:00 |
filter[datePaidTo] |
string |
No | Task payment date (end of range). Format: YYYY-MM-DD (e.g., 2020-09-03 ), with time defaulting to 23:59:59 |
filter[hasPayout] |
boolean |
No | Indicator for returning only paid tasks. Value 0 returns tasks without payouts (see here for payout requests). |
filter[priceFrom] |
integer |
No | Task price (start of interval) |
filter[priceTo] |
integer |
No | Task price (end of interval) |
filter[search] |
string |
No | Task name or description. Searches text in the task title or description. |
filter[state] |
array of integers |
No | Task status. You can pass one or multiple values (e.g., state[]=2&state[]=3 ) |
filter[currencyId] |
integer |
No | Currency ID. Possible values:
|
filter[groupId] |
integer |
No | Task group ID |
filter[deadlineType] |
integer |
No | Deadline type ID. Possible values:
|
filter[workerTaxationStatus] |
integer |
No | Freelancer tax status. Possible values:
|
filter[hasCopyright] |
boolean |
No | Indicates the need to transfer intellectual property rights |
filter[hasReport] |
boolean |
No | Indicates that a report is required when completing a task |
filter[payedBy] |
integer |
No | ID of the user who paid for the task |
filter[externalId] |
string |
No | External task ID that can be set when creating a task (merchant_txid) |
sort |
string |
No | Attribute for sorting. Possible values:
|
direction |
string |
No | Sorting order. Possible values:
|
page |
integer |
No | Page number for pagination |
size |
integer |
No | Number of items per page (default is 20, maximum is 500) |
Response
A successful request returns the following response:
Property | Type | Description |
---|---|---|
items |
list |
List of items |
id |
integer |
Task ID |
additionalAttributes |
object |
Additional task attributes |
category |
object |
Task category |
category.id |
integer |
Category ID |
category.title |
string |
Category name |
category.titleEn |
string |
Category name in English |
category.titleDoc |
string |
Category name for accounting documents |
category.titleDocEn |
string |
Category name for accounting documents (in English) |
parentCategory |
object |
Parent task category |
category.id |
string |
Task category ID |
category.title |
string |
Task category name |
category.title_en |
string |
Task category name in English |
commissionAmount |
float |
Commission amount |
commissionPercent |
float |
Commission percentage |
copyright |
string |
Intellectual property rights transfer indicator |
createType |
string |
Task creation method (via API or interface) |
currency |
object |
Task currency |
currency.currency |
string |
Task currency name |
currency.id |
integer |
Task currency ID |
customer |
object |
Client |
customer.id |
string |
Company ID |
customer.title |
string |
Company name |
creator |
object |
Task creator |
creator.id |
integer |
Creator user ID |
creator.fullName |
string |
Full name of the creator |
worker |
object |
Freelancer |
worker.id |
integer |
Freelancer ID (returned in freelancer retrieval request) |
worker.email |
string |
Freelancer email |
worker.firstName |
string |
Freelancer first name |
worker.lastName |
string |
Freelancer last name |
worker.isVerified |
boolean |
Verification status of the freelancer |
dateCreated |
string |
Task creation date |
dateAccepted |
string |
Date the task was accepted by the client |
dateEnd |
string |
Task deadline |
dateFinished |
string |
Task completion date |
datePaid |
string |
Task payment date |
datePayAt |
string |
Task payment initiation date |
documentDate |
string |
Accounting document generation date |
description |
string |
Task description |
uuid |
uuid |
Task UUID |
needReport |
boolean |
Indicates if a report is required for the task |
price |
float |
Task price |
state |
integer |
Task status |
title |
string |
Task name |
hasPayout |
boolean |
Indicates if a payout is present for the task |
files |
object |
Attached files |
files.id |
string |
File ID |
files.name |
string |
Filename |
files.typeId |
string |
File type |
files.ownerId |
string |
ID of the file's uploader (files can be added by both clients and freelancers) |
deadline |
object |
Deadline |
deadline.type |
integer |
Deadline type (soft 1 or hard 2 ) |
deadline.triggerDate |
string |
Deadline date |
deadline.isComingUp |
boolean |
Indicates if the deadline is less than 3 days away |
group |
object |
Task group |
group.id |
integer |
Task group ID |
group.title |
string |
Task group name |
hold |
object |
Fund holding (escrow) |
hold.type |
string |
Holding (escrow) type |
hold.isActive |
boolean |
Indicates if fund holding is active for the task |
insurance |
object |
Insurance |
insurance.status |
integer |
Insurance status |
messageCount |
integer |
Number of messages |
activeDispute |
boolean |
Indicates if there is an open dispute |
activeChangesetId |
integer |
Indicates if change approval is ongoing for the task |
issueCode |
string |
Task processing error (e.g., insufficient funds for holding if Secure Deal is enabled) |
compensateWorkerServiceFee |
boolean |
Freelancer service fee compensation indicator (if true, the client covers the freelancer's fee) |
pagination |
list |
Paginated output of items |
pagination.count |
integer |
Number of returned items |
pagination.total |
integer |
Total items available for the requested filter |
pagination.perPage |
integer |
Number of items per page |
pagination.page |
integer |
Page number |
pagination.pages |
integer |
Total pages |
Retrieving Tasks Using Their IDs
Sample request
curl -X GET "https://my.mellow.io/api/customer/tasks/c6e8e285-1e0a-4a11-a676-89211c0adccc"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
Sample response
HTTP status code: 200 OK
{
"attributes": [
{
"attribute": {
"title": "URL-адрес ",
"titleEn": "URL-address",
"type": "1"
},
"attributeType": {
"title": "Адрес сайта",
"titleEn": "URL adress ",
"type": "text"
},
"values": [
{
"title": "http://some.domain.com"
}
]
}
],
"messages": [],
"creator": {
"id": 100740,
"fullName": "Andrey Smirnov"
},
"worker": {
"id": 100871,
"email": "[email protected]",
"firstName": "Nina",
"lastName": "Malina",
"isVerified": true
},
"files": [],
"links": [],
"messageCount": 0,
"additionalAttributes": null,
"category": {
"id": 20,
"title": "Управление размещением медийной рекламы",
"titleEn": "ATL advertising management",
"titleDoc": "Услуги по управлению размещением рекламных материалов на интернет сайтах",
"titleDocEn": "Services on managing advertising materials' placement at websites"
},
"parentCategory": {
"id": 2,
"title": "Интернет-реклама",
"titleEn": "Internet advertising"
},
"commissionAmount": 7.29,
"commissionPercent": 9,
"copyright": false,
"createType": "API",
"currency": {
"currency": "EUR",
"id": 3
},
"customer": {
"id": 3021,
"title": "OOO Tekhnoprom"
},
"dateCreated": "2021-09-15 09:45:00",
"dateAccepted": "2021-09-15 12:00:00",
"dateEnd": "2021-09-20 18:00:00",
"dateFinished": null,
"datePaid": "2021-09-20 18:30:00",
"datePayAt": null,
"documentDate": "2021-09-20 18:00:00",
"description": "Website development task",
"uuid": "987e1234-a89b-56d3-b123-427677440000",
"id": 584123,
"needReport": true,
"price": 250,
"state": 3,
"title": "WebDev Singapore Project",
"deadline": {
"type": 0,
"triggerDate": null,
"isComingUp": false
},
"hold": {
"type": "without_hold",
"isActive": false
},
"insurance": {
"status": 0
},
"activeDispute": null,
"activeChangesetId": null
}
This method is used to retrieve the details of a task using its ID.
Request
HTTP Request
Path parameters
As a path parameter, you must pass either taskId or taskUuid, which can be obtained in the specified request.
Response
A successful request returns the following response:
Property | Type | Description |
---|---|---|
id |
integer |
Task ID |
additionalAttributes |
object |
Additional task attributes |
category |
object |
Task category |
category.id |
integer |
Category ID |
category.title |
string |
Category name |
category.titleEn |
string |
Category name in English |
category.titleDoc |
string |
Category name for accounting documents |
category.titleDocEn |
string |
Category name for accounting documents (in English) |
parentCategory |
object |
Parent task category |
category.id |
string |
Task category ID |
category.title |
string |
Task category name |
category.title_en |
string |
Task category name in English |
commissionAmount |
float |
Commission amount |
commissionPercent |
float |
Commission percentage |
copyright |
string |
This property concerns the transfer of intellectual property rights |
createType |
string |
Indicates how the task was created (via the API or interface) |
currency |
object |
Task currency |
currency.currency |
string |
Task currency name |
currency.id |
integer |
Task currency ID |
customer |
object |
Client |
customer.id |
string |
Company ID |
customer.title |
string |
Company name |
creator |
object |
User that created the task |
creator.id |
integer |
ID of the user that created the task |
creator.fullName |
string |
Full name of the user that created the task |
worker |
object |
Freelancer |
worker.id |
integer |
Freelancer ID (returned in a freelancer retrieval request) |
worker.email |
string |
Freelancer's email |
worker.firstName |
string |
Freelancer's first name |
worker.lastName |
string |
Freelancer's last name |
worker.isVerified |
boolean |
Indicates whether the freelancer is verified or not |
dateCreated |
string |
Task creation date |
dateAccepted |
string |
Date when the task was accepted by the client |
dateEnd |
string |
Date of the task’s deadline |
dateFinished |
string |
Date when the freelancer completed the task |
datePaid |
string |
Date of task payment arrival |
datePayAt |
string |
Date of task payment initiation |
documentDate |
string |
Date when accounting documents were generated |
needReport |
boolean |
Indicates whether a task report is required |
description |
string |
Task description |
uuid |
uuid |
Task's UUID |
price |
float |
Task price |
state |
integer |
Task status |
title |
string |
Task name |
files |
object |
Files attached to the task |
files.id |
string |
File ID |
files.name |
string |
Filename |
files.typeId |
string |
File type |
files.ownerId |
string |
ID of the user that added the file (files can be added by both clients and freelancers) |
deadline |
object |
Deadline |
deadline.type |
integer |
Deadline type (1 for soft, 2 for hard) |
deadline.triggerDate |
string |
Deadline date |
deadline.isComingUp |
boolean |
Indicates that the deadline is less than 3 days away |
hold |
object |
Holding of funds (escrow) |
hold.type |
string |
Holding (escrow) type |
hold.isActive |
boolean |
Indicates whether holding (escrow) is active for the task |
insurance |
object |
Insurance |
insurance.status |
integer |
Status of insurance |
hasPayout |
boolean |
Indicates whether a payout has occurred or not |
messageCount |
integer |
Number of messages |
activeDispute |
boolean |
Indicates whether there is an open dispute |
activeChangesetId |
integer |
Indicates whether approval of changes is in progress for the task |
serviceFeeCompensation |
integer |
Freelancer's commission compensation amount |
compensateWorkerServiceFee |
boolean |
Indicates if the freelancer’s service fee is compensated by the client |
serviceFeeCompensationPercent |
integer |
Percentage of task cost for freelancer's commission compensation |
Creating a Task
Sample request
curl -X POST "https://my.mellow.io/api/customer/tasks"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-d '{
"uuid": "9b1c5a73-2f9e-4c18-9bc6-8390a12d6fb8",
"categoryId": 42,
"attributes": [
{
"id": 42,
"value": "5"
}
],
"acceptanceFileIds": [
102, 105
],
"copyright": true,
"needReport": false,
"title": "Market Analysis Report",
"description": "Detailed report on market trends and projections for Q3 2022",
"externalId": "MAR-20220622",
"fileIds": [
102, 103, 104
],
"workerId": 15,
"editGroup": [
105, 107
],
"deadline": "2022-07-15T17:00:00.000Z",
"price": 1500,
"validateOnly": true,
"needInsurance": true,
"compensateWorkerServiceFee": true,
"advData": {
"endContracts": [
{
"uuid": "ab2c9d18-f712-4f8a-91d7-5fa3a7bc7b8e",
"sum": 300
},
{
"uuid": "dfe546b8-3a9d-4e4c-b49c-7ad2c99f1b2e",
"sum": 450
},
{
"uuid": "c123f0b5-568d-4b3f-91d4-2b2e7d71f8ae",
"sum": 500
}
]
}
}
'
Sample response
HTTP status code: 200 OK
The method is used to create new tasks. If online ads are shown in Russia, they are subject to the ad labeling law. Therefore, when creating tasks with this service category, you need to pass additional attributes. To learn more, see here.
Request
HTTP Request
Request body
Parameter | Type | Required | Description |
---|---|---|---|
uuid |
string |
No | Task UUID (if not provided, this parameter is determined automatically) |
categoryId |
integer |
Yes | ID of the task's service/work. To retrieve all of the available services and works, use this request |
attributes |
object |
Yes | Task attributes. At least 1 (one) attribute is required. To retrieve all the available task attributes, use this request |
attributes.id |
integer |
Yes | Attribute ID |
attributes.value |
string |
Yes | Task attribute's value. For select-type attributes, you need to provide a text value |
acceptanceFileIds |
array |
No | Files that a freelancer needs to sign to accept the task |
copyright |
boolean |
No | Indicates the need to transfer intellectual property rights |
needReport |
boolean |
No | Indicates the need to attach a report to a completed task |
title |
string |
Yes | Task name |
description |
string |
Yes | Task description |
fileIds |
string |
No | Files to be attached to the task |
workerId |
integer |
Yes | Freelancer ID. To retrieve a list of freelancers, use this request |
editGroup |
array |
No | Task group. To retrieve available groups, use this request |
externalId |
string |
No | ID that can be set when creating a task (merchant_txid) |
deadline |
date |
Yes | Task deadline (e.g., 2022-05-19 11:53:03 ) |
price |
float |
Yes | Task price |
needInsurance |
boolean |
No | Indicates whether the task has insurance |
validateOnly |
boolean |
No | Determines whether the task will be created. If the value is 1, the system will check if all the conditions for creating a task are met and return a response indicating whether the task can be created (without creating a task) |
advData |
object |
No | Data for ensuring compliance with the ad labeling law. To learn more, see here. For breakdown (itemization), add multiple contracts per task. If task amount exceeds contracts, surplus is classified as Ad Production |
advData.endContracts.uuid |
Uuid |
No | Contract ID for the purposes of the ad labeling law. To learn more, see here |
advData.endContracts.sum |
integer |
No | Contract amount, required if task has multiple contracts. Optional if there's only one contract. See here |
shareCommission |
boolean |
No | Indicates whether the commission is shared with the freelancer (if 0, commission is fully paid by the client, if 1, 1% of client's commission is compensated by the freelancer). If unspecified, commission is paid by the client |
Response
A successful request returns UUID of created task.
Retrieving Insurance Info
Sample request
curl -X GET "https://my.mellow.io/api/customer/insurance/info"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
Sample response
HTTP status code: 200 OK
This method is used to obtain information about task insurance for the requested freelancer.
Request
HTTP Request
Parameter
Parameter | Type | Required | Description |
---|---|---|---|
workerId |
integer |
Yes | Freelancer ID (returned in a freelancer retrieval request) |
categoryId |
integer |
Yes | Task category (to learn more, see the task category retrieval request) |
Response
Property | Type | Description |
---|---|---|
canBeInsured |
boolean |
Indicates whether the task can be insured |
acceptanceRequired |
boolean |
Indicates whether confirmation from the freelancer is needed to insure the task |
cost |
float |
Insurance cost (in rubles) |
insureByDefault |
boolean |
Indicates whether tasks are going to be automatically insured |
Changing Task Status
Sample request
curl -X PUT "https://my.mellow.io/api/customer/tasks/c6e8e285-1e0a-4a11-a676-89211c0adccc"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
Sample response
HTTP status code: 200 OK
{
"state": 3
}
This method is used to change the task status based on the freelancer's actions. Before using this request, please contact Mellow support to have additional access rights to the service added. You can switch to the following statuses: Start task (ID=2
), Complete task (ID=3
), Decline task (ID=6
), and Confirm rejection if the task was rejected by the client (ID=8
).
There are additional requests for rejecting/declining a task or resuming the work.
Request
HTTP Request
Path parameters
Parameter | Type | Required | Description |
---|---|---|---|
taskId |
integer |
Either taskId or uuid is required |
Task ID. To retrieve a list of tasks, use this request. |
uuid |
string |
Either taskId or uuid is required |
Task UUID |
Request body
Parameter | Type | Required | Description |
---|---|---|---|
state |
integer |
Yes | Task status. The available statuses are: Start task (ID=2 ), Complete task (ID=3 ), Decline task (ID=6 ), and Confirm rejection if the task was rejected by the client (ID=8 ). |
Response
A successful request returns an empty response.
Возможные ошибки:
Possible errors:
- Unsigned offer agreement. If there is a new offer agreement that is required to start a task, the user needs to accept it.
{ "error": "To start the task, please sign the offer agreement", "code": 11 }
Changing Deadline
Sample request
curl -X POST "https://my.mellow.io/api/customer/tasks/prolong-deadline"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
Sample response
HTTP status code: 200 OK
This method is used to extend the task's deadline only for tasks in the "Awaiting action from the client" status.
Request
HTTP Request
Request body
Parameter | Type | Required | Description |
---|---|---|---|
taskId |
integer |
Either taskId or uuid is required |
Task ID. To retrieve a list of tasks, use this request. |
uuid |
string |
Either taskId or uuid is required |
Task's UUID. |
deadline |
date |
Yes | Date of the new deadline in 2022-07-25T15:00:58.295Z format |
Response
A successful request returns an empty response.
Checking for Issues Prior to Task Start
Sample request
curl -X GET "http://my.mellow.io/api/customer/freelancers/check-task-requirements?taskUuid=837843c9-72e5-48e2-a133-e97e347373af&freelancerUuid=ec304480-5e3f-4bb7-a9e5-dbb49fb673e9"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
Sample response
HTTP status code: 200 OK
{
"url": "http://my.mellow.io/agreement",
"templateUuid": "1as7ac19-5y33-4a3a-94b3-b4a26374de4d"
}
This request indicates whether the freelancer can start the task or if there are any issues preventing it (such as the need to re-sign the offer agreement or get verified). Therefore, this request must be called before changing the task status to Start task (ID=2
). Possible issues:
- The offer agreement needs to be re-signed. You need to have the new offer agreement shown to the freelancer, ensure they agree to it, and call the "Accept offer on behalf of freelancer" request.
- Freelancer needs to get verified.
- Freelancer needs to accept non-disclosure documents (NDA).
- Requirements related to advertising (such as the need to specify the TIN, OGRNIP, or phone number). To learn more, see the Ad Labeling Law section.
Request
HTTP Request
Path parameters
Parameter | Type | Required | Description |
---|---|---|---|
taskUuid |
uuid |
Yes | Task UUID that is returned upon calling the retrieve task by ID or "retrieve task list" requests |
freelancerUuid |
uuid |
Yes | Freelancer UUID that is returned upon calling the invite new freelancer request |
Response
If no issues are found, then the response is returned empty.
Property Name | Type | Description |
---|---|---|
name |
string |
Issue name |
data |
object |
The details of the document that need to be signed (or any other restriction that must be complied with to start working on the task). If the constraint is related to verification (name=verification ), this field will contain an empty object. |
data.url |
string |
URL of the document that needs to be re-signed |
data.templateUuid |
string |
Document UUID |
data.code |
string |
Issue code |
reason |
string |
Cause of the issue (for example, the task being on a sanctions list and therefore requiring the signing of the offer agreement prior to starting) |
Accepting Task
Sample request
curl -X POST "https://my.mellow.io/api/customer/tasks/accept"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-d '{
"uuid": "123e4567-e89b-12d3-a456-426655440000"
}'
Sample response
HTTP status code: 200 OK
This method is used to accept the results of the freelancer's work. It can only be called on tasks in the Completed status (ID=3
).
Request
HTTP Request
Body request
Parameter | Type | Required | Description |
---|---|---|---|
taskId |
integer |
Either taskId or uuid is required |
Task ID. To retrieve a list of tasks, use this request. |
uuid |
string |
Either taskId or uuid is required |
Task's UUID |
Request body
No additional parameters are required.
Response
A successful request returns an empty response.
Pay for Task
Sample request
curl -X POST "https://my.mellow.io/api/customer/tasks/pay"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-d '{
"uuid": "123e4567-e89b-12d3-a456-426655440000"
}'
Sample response
HTTP status code: 200 OK
This method is used to pay for tasks. The funds are debited from the client's balance and credited to the freelancer's balance. This method can only be used to pay for a task that is in the "Pending payment" status (ID = 4
).
Request
HTTP Request
Request body
Request body
Parameter | Type | Required | Description |
---|---|---|---|
taskId |
integer |
Either taskId or uuid is required |
Task ID. To retrieve a list of tasks, use this request. |
uuid |
string |
Either taskId or uuid is required |
Task's UUID. |
Response
A successful request returns an empty response.
Pay for Task upon Creation
Sample request
curl -X POST "https://my.mellow.io/api/customer/tasks/quick-pay"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-d '{
"taskId": 1
} '
Sample response
HTTP status code: 200 OK
This method is used to pay for tasks that are in the New
status. You can create a new task and call this request right away, and the task's status will switch to Paid
(unlike the previous request, which can only make a task Paid
from the Pending payment
status). This method only works for tasks that have no additional documents (offer agreements, NDAs) for the freelancer to sign.
Request
HTTP Request
Request body
Parameter | Type | Required | Description |
---|---|---|---|
taskId |
integer |
Either taskId or uuid is required |
Task ID. To retrieve a list of tasks, use this request. |
uuid |
string |
Either taskId or uuid is required |
Task's UUID |
companyId |
integer |
No | Company ID |
Response
A successful request returns an empty response.
Declining/Rejecting Task
Sample request
curl -X POST "https://my.mellow.io/api/customer/tasks/decline
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-d '{
"taskId": 180012
}'
Sample response
HTTP status code: 200 OK
This method is used to decline (reject) the task. Depending on the task's status prior to the request, after the request is called the status will change to:
- For the statuses New (
ID=1
), In progress (ID=2
), and Waiting for contractor to confirm rejection (ID=11
), the new status will be Rejected by client (ID=8
). - For the statuses Pending payment (
ID=4
) and Client review (ID=3
), the new status will be Waiting for contractor to confirm rejection (ID=11
). - For the statuses Change approval (
ID=16
), Dispute initiated (ID=13
), Completed (ID=5
), Declined by contractor (ID=6
), and Waiting for contractor to confirm rejection (ID=11
), an error will be returned.
Request
HTTP Request
Request body
Parameter | Type | Required | Description |
---|---|---|---|
taskId |
integer |
Yes | Task ID. To retrieve a list of tasks, use this request. |
Response
A successful request returns an empty response.
Resume Task
Sample request
curl -X POST "https://my.mellow.io/api/customer/tasks/return-to-work
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-d '{
"taskId": 180012
}'
Sample response
HTTP status code: 200 OK
This method is used to resume work on the task. The task can only be returned to the In progress status (ID=2
) from Client review (ID=3
). For all other statuses, an error will be returned. See a detailed chart with the main task statuses here.
Request
HTTP Request
Request body
Parameter | Type | Required | Description |
---|---|---|---|
taskId |
integer |
Yes | Task ID. To retrieve a list of tasks, use this request. |
Response
A successful request returns an empty response.
Ad Labeling Law
This section lists requests used to create tasks that involve the distribution of advertising in Russia. To learn more, see here.
If you are the end advertiser, then in your task creation request you need to provide the ID of the contract with Mellow, which is returned when you request company details for the advertising data operator (the contract with Mellow has the value true
for the isPrimary
parameter).
If you are not the end advertiser but an intermediary, then you need to provide the details of the end customer and their contractor:
If you need a breakdown (itemization), you can add multiple contracts for each task. If the task amount exceeds that of all added contracts, the surplus will be classified as Ad Production. To retrieve all the contracts related to the task, use this request.
Providing Customer Details
Sample request
curl -X POST "https://my.mellow.io/api/customer/ord/organization"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
-d "{
"externalOrganisationId": "4fc2b18c-8e2b-41f1-a12e-d3b9e5b87fa4",
"fullOpf": "ООО Альтаир",
"inn": "7701234567",
"ogrn": "1027700132195",
"regionNumber": "78"
}"
Sample response
HTTP status code: 200 OK
This method is used to add customer details. If you are an intermediary, you need to add the details of the end customer:
- Provide end customer details
- Provide the details of the end customer's contractor. If you are the end customer's contractor, then when creating a contract, you need to use the UUID returned in the request for your company's details.
Request
HTTP Request
Request body
Parameter | Type | Required | Description |
---|---|---|---|
externalOrganisationId |
uuid |
Yes | Customer UUID |
fullOpf |
string |
Required for legal entities | Form of incorporation and full name |
inn |
string |
Required for all customers in Russia | Taxpayer Identification Number (INN, TIN) |
ogrn |
string |
No | Business Registration Number (OGRN) |
fio |
string |
Required for individuals and individual entrepreneurs | Full name |
ogrnip |
string |
No | Individual Entrepreneur Registration Number (OGRNIP) |
registrationNumber |
string |
Required for non-Russian legal entities | Registration number or its equivalent |
phoneNumber |
string |
Required for non-Russian individuals | Phone number |
taxId |
string |
Required for non-Russian legal entities | Taxpayer identification number or its equivalent in the country of registration |
regionNumber |
string |
Required for non-Russian customers | Country code from the Russian Classification of the World's Countries (OKSM) |
paymentNumber |
string |
Required for non-Russian individuals | Electronic payment instrument number |
Response
A successful request returns an empty response.
Retrieving List of Added Customers
Sample request
curl -X GET "https://my.mellow.io/api/customer/ord/organization"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
Sample response
HTTP status code: 200 OK
{
"items": [
{
"uuid": "b913d8fa-cf7a-4d2e-8c3a-0b23688e2a10",
"title": "ООО Вектор",
"type": "organisation",
"isPrimary": true
},
{
"uuid": "c821f2db-af6b-4f98-8b7a-1a32765f4cbe",
"title": "ЗАО ПромТех",
"type": "organisation",
"isPrimary": false
}
],
"pagination": {
"count": 2,
"total": 2,
"perPage": 20,
"page": 1,
"pages": 1 }
}
This method is used to retrieve the list of all the customers you have added.
Request
HTTP Request
Parameters
No additional parameters are required.
Response
Property Name | Type | Description |
---|---|---|
uuid |
uuid |
Customer UUID |
title |
string |
Customer name |
type |
string |
Customer type |
isPrimary |
boolean |
Returns true if this customer was added by you. |
Retrieving Customer Details by ID
Sample request
curl -X GET "https://my.mellow.io/api/customer/ord/organization/537ed52b-bb6f-452c-bd71-7c82fff7fbf7"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
Sample response
HTTP status code: 200 OK
{
"data": {
"externalOrganisationId": "be4fd12c-abc3-47d9-bde7-5a2b3cbb4f6a",
"inn": "7701234567",
"isOpc": true,
"isPp": false,
"fio": "Иванов Иван Иванович",
"fullOpf": "АО Сигма",
"individualAccountDescription": " ",
"legalType": "LEGAL_TYPE_LEGAL",
"ogrn": "1047700060100",
"ogrnip": "",
"paymentNumber": "40802810700000012345",
"phoneNumber": "+7 (495) 123-45-67",
"regionNumber": "77",
"platforms": [
{
"externalPlatformId": "f5c2b94d-dc2e-4c8e-8e3d-f7127b3448b1",
"isPlatformOwner": true
}
],
"postAddress": "г. Москва, ул. Тверская, д. 1",
"regionNumber": "77",
"registrationNumber": "123456789",
"shortOpf": "АО Сигма",
"taxId": "1234567890",
"trustedPerson": "Петров Петр Петрович",
"violationDescription": " " },
"uuid": "c6f7e1bc-3fa8-4d23-910d-8d2f1a234bcd",
"title": "ООО Альфа",
"type": "organisation",
"isPrimary": true
}
This method is used to retrieve the details of an added customer.
Request
HTTP Request
Path-parameters
As a path parameter, you must pass customer UUID.
Response
Property Name | Type | Description |
---|---|---|
externalOrganisationId |
string |
Customer UUID |
fullOpf |
string |
Form of incorporation and full name |
inn |
string |
INN (TIN) |
isOpc |
boolean |
Indicates whether the party is an advertising system operator |
isPp |
boolean |
Indicates whether the party is an ad distributor |
ogrn |
string |
Business Registration Number (OGRN) |
fio |
string |
Full name |
individualAccountDescription |
string |
Descriptor: legal entity, individual, individual entrepreneur, non-Russian individual, non-Russian legal entity, non-Russian sole proprietor |
legalType |
string |
Form of ownership
|
ogrnip |
string |
Individual Entrepreneur Registration Number (OGRNIP) |
registrationNumber |
string |
Registration number or its equivalent |
phoneNumber |
string |
Phone number |
taxId |
string |
Taxpayer number or its equivalent in the country of registration |
paymentNumber |
string |
Number of electronic payment method (for non-Russian individuals) |
platforms.externalPlatformId |
string |
Platform UUID. Because Mellow does not independently register creatives, platforms are not added either. Therefore, this parameter's value is always empty |
platforms.isPlatformOwner |
boolean |
Indicates whether the party is the platform's owner. Because Mellow does not independently register creatives, platforms are not added either. Therefore, this parameter's value is always empty |
postAddress |
string |
Postal address |
regionNumber |
string |
Code of the country of registration according to the Russian Classification of the World's Countries OKSM |
shortOpf |
string |
Form of incorporation and short name |
trustedPerson |
string |
Position and full name of the person who is entitled to act on behalf of the legal entity without a power of attorney (for legal entities) |
violationDescription |
string |
Details of any non-compliance with the requirements for online ad distribution on the part of the advertiser, ad distributor, or advertising system operator |
Providing Contract Details
Sample request
curl -X POST "https://my.mellow.io/api/customer/ord/contract"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
-d "{
"externalOrganisationCustomerId": "8jk2bc19-5y33-4a3a-94b3-b4a26374de3n",
"externalOrganisationPerformerId": "1as7ac19-5y33-4a3a-94b3-b4a26374de4d",
"contractNumber":"1",
"contractDate": "11.01.2020"
}"
Sample response
HTTP status code: 200 OK
This method is used to add contract details. After adding the end customer details, you need to add the contract between the end customer and their contractor. There are two scenarios here:
Direct Contract with End Customer: If you have a contract with the end customer, you need to:
- Create an end customer
- Retrieve your company's
uuid
- Add a contract where you pass the
uuid
of the created customer in theexternalOrganisationCustomerId
parameter, and youruuid
in theexternalOrganisationPerformerId
parameter.
Intermediary Involvement: If there is one or more intermediaries between you and the end customer, you need to make two requests:
Request
HTTP Request
Path-parameters
Parameter | Type | Required | Description |
---|---|---|---|
externalContractId |
uuid |
Yes | Contract UUID |
externalOrganisationCustomerId |
uuid |
Yes | Initiator (customer) ID. Returned in a request to create or retrieve the details of the customer. |
externalOrganisationPerformerId |
uuid |
Yes | Contractor ID. Returned in a request to create or retrieve the details of the customer. |
contractNumber |
string |
No | Contract number |
contractDate |
string |
Yes | Contract date |
contractType |
string |
Yes | Contract type:
|
subjectType |
string |
Yes | Information about the subject of the contract:
|
Response
A successful request returns an empty response.
Retrieve List of Added Contracts
Sample request
curl -X GET "https://my.mellow.io/api/customer/ord/contract"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
Sample response
HTTP status code: 200 OK
{
"items":[
{
"uuid":"a740f1bf-fc7a-4e68-9ad9-0a23688f3b01",
"title":"Contract org1-org2",
"type":"contract",
"isPrimary":false
}
],
"pagination":
{
"count":1,
"total":1,
"perPage":20,
"page":1,
"pages":1
}
}
This method is used to retrieve a list of all the added contracts.
Request
HTTP Request
Parameters
There are no additional request parameters.
Response
Name | Type | Description |
---|---|---|
uuid |
uuid |
Contract UUID |
title |
string |
Contract name |
type |
uuid |
Contract type |
isPrimary |
boolean |
Indicates whether it is a contract with the end customer |
Retrieving Contract Details by ID
Sample request
curl -X GET "https://my.mellow.io/api/customer/ord/contract/1as7ac19-5y33-4a3a-94b3-b4a26374de4d"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
Sample response
HTTP status code: 200 OK
{
"data": {
"externalContractId": "d482f2c7-dcb3-4c0a-bb1d-2eac70c5d3a4",
"contractType": "CONTRACT_TYPE_SERVICE",
"externalOrganisationCustomerId": "af1d8b34-bb4a-4d77-9ec4-3eac2f35c5a9",
"externalOrganisationPerformerId": "bf2d3c56-ca4f-4e89-8b2d-4fb1a8c3e2d3",
"isCreativeReporter": true,
"actionType": "ACTION_TYPE_APPROVAL",
"subjectType": "SUBJECT_TYPE_CONSULTING",
"contractNumber": "2022-001",
"contractDate": "2022-09-15",
"additionalContractNumber": "2022-001-A",
"additionalContractNumberDate": "2022-09-20",
"price": "1500.00",
"withNds": true,
"externalParentId": "f1a8e3b6-9d7c-4b5c-a678-1a2f5c6e4d8f",
"createdAt": "2022-09-15T08:30:00.000Z",
"editedAt": "2022-10-01T17:45:00.000Z",
"createdBy": {
"id": "153",
"email": "[email protected]",
"name": "Иванов Максим"},
"editedBy": {
"id": "154",
"email": "[email protected]",
"name": "Петров Иван"} },
"uuid": "b293f2a1-4b6f-44b7-bd1a-9a2c6f2b3d1f",
"title": "Consulting Contract - Client A & Partner B",
"type": "contract",
"isPrimary": true
}
This method is used to retrieve information about an added contract based on its uuid.
Request
HTTP Request
Path-parameters
As a path parameter, you must pass contract UUID.
Response
Name | Type | Description |
---|---|---|
data.externalContractId |
uuid |
Contract UUID |
data.externalOrganisationCustomerId |
uuid |
Initiator (customer) ID |
data.externalOrganisationPerformerId |
uuid |
Contractor ID |
data.contractType |
string |
Contract type:
|
data.contractNumber |
string |
Contract number |
data.contractDate |
string |
Contract date |
data.isCreativeReporter |
string |
Indicates whether the contractor is required to register creatives |
data.actionType |
string |
Actions of the intermediary representative:
|
data.subjectType |
string |
Information about the contract's subject:
|
data.additionalContractNumber |
string |
Addendum number (for addenda) |
data.additionalContractNumberDate |
string |
Addendum date |
data.price |
float |
Contract price (if applicable) |
data.withNds |
string |
Indicates if VAT was applied to the price |
data.externalParentId |
uuid |
Parent contract UUID |
data.createdAt |
string |
Date contract was added to the advertising data operator (ADO) |
data.editedAt |
string |
Date of contract data update in the ADO |
data.createdBy.id |
integer |
ID of the user that added the contract |
data.createdBy.email |
string |
Email of the user that added the contract |
data.createdBy.name |
string |
Username |
data.editedBy |
string |
ID of the user that updated the contract details |
uuid |
uuid |
Contract UUID |
title |
string |
Contract name |
type |
uuid |
Contract type |
isPrimary |
boolean |
Indicates if it is a contract with the end customer |
Retrieving Contract Details by Task ID
Sample request
curl -X GET "https://my.mellow.io/api/customer/ord/task-summary/1as7ac19-5y33-4a3a-94b3-b4a26374de4d"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
Sample response
HTTP status code: 200 OK
{
"endContract": {
"uuid": "4a0355a7-9019-4208-8f86-6becde69ef",
"title": "100623 (2020-10-15)",
"type": "contract",
"customer": {
"uuid": "96cf28dc-43fe-495e-ae02-db8a8a06fb",
"title": "ааа",
"type": "organisation",
"externalOrganisationId": "96cf28dc-43fe-495e-ae02-db8a8a06fb",
"inn": "6174387653",
"isOpc": false,
"isPp": false,
"fio": "",
"fullOpf": "ааа",
"individualAccountDescription": "",
"legalAddress": {
"address": "",
"locality": "",
"postcode": ""
},
"legalType": "LEGAL_TYPE_LEGAL",
"ogrn": "22222222",
"ogrnip": "0",
"paymentNumber": "",
"phoneNumber": "",
"platforms": [],
"postAddress": {
"address": "",
"locality": "",
"postcode": ""
},
"regionNumber": "",
"registrationNumber": "",
"shortOpf": "",
"taxId": "",
"trustedPerson": "",
"violationDescription": ""
},
"performer": {
"uuid": "0109ce50-ff03-4c1c-96af-26bf816597fc",
"title": "ООО ",
"type": "organisation",
"externalOrganisationId": "0109ce50-ff03-4c1c-96af-26bf816597fc",
"inn": "7733228841",
"isOpc": false,
"isPp": false,
"fio": "",
"fullOpf": "ООО ",
"individualAccountDescription": "",
"legalType": "LEGAL_TYPE_LEGAL",
"ogrn": "1157746300964",
"ogrnip": "0",
"paymentNumber": "",
"phoneNumber": "",
"platforms": [],
"postAddress": null,
"regionNumber": "",
"registrationNumber": "",
"shortOpf": "",
"taxId": "",
"trustedPerson": "",
"violationDescription": ""
},
"contractSum": null,
"actionType": "ACTION_TYPE_INVALID",
"additionalContractNumber": "",
"additionalContractNumberDate": "",
"contractDate": "2020-10-15",
"contractNumber": "100623",
"contractType": "CONTRACT_TYPE_SERVICE",
"externalContractId": "4a0355a7-9019-4208-8f86-6becde69e",
"externalOrganisationCustomerId": "96cf28dc-43fe-495e-ae02-db8a8a06f",
"externalOrganisationPerformerId": "0109ce50-ff03-4c1c-96af-26bf816597fc",
"externalParentId": "",
"isCreativeReporter": false,
"price": "",
"subjectType": "SUBJECT_TYPE_INTERMEDIARY",
"withNds": false
},
"endContracts": [
{
"uuid": "4a0355a7-9019-4208-8f86-6becde69e",
"title": "100623 (2020-10-15)",
"type": "contract",
"customer": {
"uuid": "96cf28dc-43fe-495e-ae02-db8a8a06fb0a",
"title": "ааа",
"type": "organisation",
"externalOrganisationId": "96cf28dc-43fe-495e-ae02-db8a8a06fb0a",
"inn": "6174387653",
"isOpc": false,
"isPp": false,
"fio": "",
"fullOpf": "ааа",
"individualAccountDescription": "",
"legalAddress": {
"address": "",
"locality": "",
"postcode": ""
},
"legalType": "LEGAL_TYPE_LEGAL",
"ogrn": "22222222",
"ogrnip": "0",
"paymentNumber": "",
"phoneNumber": "",
"platforms": [],
"postAddress": {
"address": "",
"locality": "",
"postcode": ""
},
"regionNumber": "",
"registrationNumber": "",
"shortOpf": "",
"taxId": "",
"trustedPerson": "",
"violationDescription": ""
},
"performer": {
"uuid": "0109ce50-ff03-4c1c-96af-26bf816597fc",
"title": "ООО "Солар Стафф Рус"",
"type": "organisation",
"externalOrganisationId": "0109ce50-ff03-4c1c-96af-26bf816597fc",
"inn": "7733228841",
"isOpc": false,
"isPp": false,
"fio": "",
"fullOpf": "ООО "Солар Стафф Рус"",
"individualAccountDescription": "",
"legalType": "LEGAL_TYPE_LEGAL",
"ogrn": "1157746300964",
"ogrnip": "0",
"paymentNumber": "",
"phoneNumber": "",
"platforms": [],
"postAddress": null,
"regionNumber": "",
"registrationNumber": "",
"shortOpf": "",
"taxId": "",
"trustedPerson": "",
"violationDescription": ""
},
"contractSum": 4000,
"actionType": "ACTION_TYPE_INVALID",
"additionalContractNumber": "",
"additionalContractNumberDate": "",
"contractDate": "2020-10-15",
"contractNumber": "100623",
"contractType": "CONTRACT_TYPE_SERVICE",
"externalContractId": "4a0355a7-9019-4208-8f86-6becde69ef5a",
"externalOrganisationCustomerId": "96cf28dc-43fe-495e-ae02-db8a8a06fb0a",
"externalOrganisationPerformerId": "0109ce50-ff03-4c1c-96af-26bf816597fc",
"externalParentId": "",
"isCreativeReporter": false,
"price": "",
"subjectType": "SUBJECT_TYPE_INTERMEDIARY",
"withNds": false
},
{
"uuid": "54963b34-7840-43a3-a668-5f6d95ff30bc",
"title": "продв.реш.123 (2023-06-03)",
"type": "contract",
"customer": {
"uuid": "e2ce0768-0ff1-49b7-834e-8e38ed36bd83",
"title": "Продвинутые решения",
"type": "organisation",
"externalOrganisationId": "e2ce0768-0ff1-49b7-834e-8e38ed36bd83",
"inn": "4975396448",
"isOpc": false,
"isPp": false,
"fio": "",
"fullOpf": "Продвинутые решения",
"individualAccountDescription": "",
"legalAddress": {
"address": "",
"locality": "",
"postcode": ""
},
"legalType": "LEGAL_TYPE_LEGAL",
"ogrn": "0",
"ogrnip": "0",
"paymentNumber": "",
"phoneNumber": "",
"platforms": [],
"postAddress": {
"address": "",
"locality": "",
"postcode": ""
},
"regionNumber": "",
"registrationNumber": "",
"shortOpf": "",
"taxId": "4975396448",
"trustedPerson": "",
"violationDescription": ""
},
"performer": {
"uuid": "96cf28dc-43fe-495e-ae02-db8a8a06fb0a",
"title": "ааа",
"type": "organisation",
"externalOrganisationId": "96cf28dc-43fe-495e-ae02-db8a8a06fb0a",
"inn": "6174387653",
"isOpc": false,
"isPp": false,
"fio": "",
"fullOpf": "ааа",
"individualAccountDescription": "",
"legalAddress": {
"address": "",
"locality": "",
"postcode": ""
},
"legalType": "LEGAL_TYPE_LEGAL",
"ogrn": "22222222",
"ogrnip": "0",
"paymentNumber": "",
"phoneNumber": "",
"platforms": [],
"postAddress": {
"address": "",
"locality": "",
"postcode": ""
},
"regionNumber": "",
"registrationNumber": "",
"shortOpf": "",
"taxId": "",
"trustedPerson": "",
"violationDescription": ""
},
"contractSum": 200,
"actionType": "ACTION_TYPE_OTHER",
"additionalContractNumber": "",
"additionalContractNumberDate": "",
"contractDate": "2023-06-03",
"contractNumber": "продв.реш.123",
"contractType": "CONTRACT_TYPE_SERVICE",
"externalContractId": "54963b34-7840-43a3-a668-5f6d95ff30bc",
"externalOrganisationCustomerId": "e2ce0768-0ff1-49b7-834e-8e38ed36bd83",
"externalOrganisationPerformerId": "96cf28dc-43fe-495e-ae02-db8a8a06fb0a",
"externalParentId": "",
"isCreativeReporter": false,
"price": "",
"subjectType": "SUBJECT_TYPE_INTERMEDIARY",
"withNds": true
}
],
"customerContract": {
"uuid": "4a0355a7-9019-4208-8f86-6becde69ef5a",
"title": "100623 (2020-10-15)",
"type": "contract",
"customer": {
"uuid": "96cf28dc-43fe-495e-ae02-db8a8a06fb0a",
"title": "ааа",
"type": "organisation",
"externalOrganisationId": "96cf28dc-43fe-495e-ae02-db8a8a06fb0a",
"inn": "6174387653",
"isOpc": false,
"isPp": false,
"fio": "",
"fullOpf": "ааа",
"individualAccountDescription": "",
"legalAddress": {
"address": "",
"locality": "",
"postcode": ""
},
"legalType": "LEGAL_TYPE_LEGAL",
"ogrn": "22222222",
"ogrnip": "0",
"paymentNumber": "",
"phoneNumber": "",
"platforms": [],
"postAddress": {
"address": "",
"locality": "",
"postcode": ""
},
"regionNumber": "",
"registrationNumber": "",
"shortOpf": "",
"taxId": "",
"trustedPerson": "",
"violationDescription": ""
},
"performer": {
"uuid": "0109ce50-ff03-4c1c-96af-26bf816597fc",
"title": "ООО "Солар Стафф Рус"",
"type": "organisation",
"externalOrganisationId": "0109ce50-ff03-4c1c-96af-26bf816597fc",
"inn": "7733228841",
"isOpc": false,
"isPp": false,
"fio": "",
"fullOpf": "ООО "Солар Стафф Рус"",
"individualAccountDescription": "",
"legalType": "LEGAL_TYPE_LEGAL",
"ogrn": "1157746300964",
"ogrnip": "0",
"paymentNumber": "",
"phoneNumber": "",
"platforms": [],
"postAddress": null,
"regionNumber": "",
"registrationNumber": "",
"shortOpf": "",
"taxId": "",
"trustedPerson": "",
"violationDescription": ""
},
"contractSum": null,
"actionType": "ACTION_TYPE_INVALID",
"additionalContractNumber": "",
"additionalContractNumberDate": "",
"contractDate": "2020-10-15",
"contractNumber": "100623",
"contractType": "CONTRACT_TYPE_SERVICE",
"externalContractId": "4a0355a7-9019-4208-8f86-6becde69ef5a",
"externalOrganisationCustomerId": "96cf28dc-43fe-495e-ae02-db8a8a06fb0a",
"externalOrganisationPerformerId": "0109ce50-ff03-4c1c-96af-26bf816597fc",
"externalParentId": "",
"isCreativeReporter": false,
"price": "",
"subjectType": "SUBJECT_TYPE_INTERMEDIARY",
"withNds": false
},
"workerAgreement": {
"customerName": "Mellow",
"customerTaxValue": "HE 329931",
"customerPhone": "+35-725-378-701",
"performerName": "Смит Вессен",
"performerPhone": "78679098776",
"performerCountry": "RU",
"performerTaxValue": "743937218239",
"contractNumber": "16561",
"contractDate": "2021-05-01",
"sum": 4200,
"currency": {
"currency": "RUB",
"id": 1
}
}
}
This method is used to retrieve contract details using a task UUID.
Request
HTTP Request
Path parameters
As a path parameter, you must pass task UUID.
Response
Name | Type | Description |
---|---|---|
endContract.uuid |
uuid |
Contract UUID |
endContract.title |
string |
Contract name |
endContract.type |
string |
Contract type |
endContract.customer |
object |
Customer in the contract |
endContract.performer |
object |
Contractor |
endContract.contractSum |
string |
Contract amount |
endContract.actionType |
string |
Actions of the intermediary representative:
|
endContract.additionalContractNumber |
string |
Addendum number (for addenda) |
endContract.additionalContractNumberDate |
string |
Addendum date |
endContract.contractDate |
string |
Contract date |
endContract.contractNumber |
string |
Contract number |
endContract.contractType |
string |
Contract type:
|
endContract.externalContractId |
string |
Parent contract number |
endContract.externalOrganisationCustomerId |
string |
Customer ID in the parent contract |
endContract.externalOrganisationPerformerId |
string |
Contractor ID in the parent contract |
endContract.externalParentId |
string |
Parent contract UUID |
endContract.isCreativeReporter |
string |
Indicates if contractor must register creatives |
endContract.price |
float |
Contract price (if applicable) |
endContract.subjectType |
string |
Contract subject type:
|
endContract.withNds |
string |
Indicates if VAT was applied |
endContracts |
string |
Contract UUID |
endContract |
object |
All contracts in the counterparty chain, structure mirrors endContract |
customerContract |
object |
End contract of the first customer, structure mirrors endContract |
workerAgreement.customerName |
string |
Customer's name in contractor agreement |
workerAgreement.customerTaxValue |
string |
Customer's taxpayer ID in contractor agreement |
workerAgreement.customerPhone |
string |
Customer's phone number in contractor agreement |
workerAgreement.performerName |
string |
Contractor name |
workerAgreement.performerPhone |
string |
Phone number |
workerAgreement.performerCountry |
string |
Contractor's country |
workerAgreement.performerTaxValue |
string |
Contractor's taxpayer ID |
workerAgreement.contractNumber |
string |
Contract number |
workerAgreement.contractDate |
string |
Contract date |
workerAgreement.sum |
string |
Contract amount |
workerAgreement.currency.currency |
string |
Contract currency |
workerAgreement.currency.id |
integer |
Currency ID in the contract |
Task Chat
Clients and freelancers can leave messages within tasks. This section details how you can retrieve existing messages or post new ones.
Retrieving Task Messages
Sample request
curl -X GET "https://my.mellow.io/api/customer/tasks/583689/messages"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
This method is used to retrieve messages from a given task.
Request
HTTP Request
Path-parameters
As a path parameter, you must pass either task ID.
Adding Task Messages
Sample request
curl -X POST "https://my.mellow.io/api/customer/tasks/messages"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
-d "{
"taskId":583689,
"message":"Task is ready, let's go"
}"
Sample response
HTTP status code: 200 OK
This method is used to add a message to a task. Messages have the authorized user as their sender.
Request
HTTP Request
Request body
Parameter | Type | Required | Description |
---|---|---|---|
taskId |
integer |
Yes | Task ID |
message |
string |
Yes | Text of the message |
Response
A successful request returns an empty response.
Task Group
Retrieving Task Groups
Sample request
curl -X GET "https://my.mellow.io/api/customer/task-groups"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
Sample response
HTTP status code: 200 OK
{
"items": [
{
"id": 650,
"companyId": 2955,
"color": "FFFFFF",
"title": "string",
"createdAt": "2021-12-01 20:59:52"
}
],
"pagination": {
"count": 3,
"total": 3,
"perPage": 20,
"page": 1,
"pages": 1
}
}
This method is used to get a list of task groups.
Request
HTTP Request
Parameters
There are no additional request parameters.
Response
Property Name | Type | Description |
---|---|---|
items |
object |
Task groups |
items.id |
integer |
Task group ID |
items.companyId |
integer |
Client ID |
items.color |
string |
Group icon color |
items.title |
string |
Group name |
items.createdAt |
string |
Date of task group creation |
pagination |
object |
Pages |
pagination.count |
integer |
Current page |
pagination.total |
integer |
Number of pages |
pagination.perPage |
integer |
Number of tasks per page |
pagination.page |
integer |
Current page |
pagination.pages |
integer |
Number of pages |
Renaming Task Group
Sample request
curl -X PUT "https://my.mellow.io/api/customer/task-groups"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
-d "{
"groupId":650,
"title":"new name"
}"
Sample response
HTTP status code: 200 OK
{
"actorId": 100740,
"companyId": 2955,
"groupId": 650,
"title": "new name"
}
This method is used to change the name of a task group.
Request
HTTP Request
Request body
Parameter | Type | Required | Description |
---|---|---|---|
groupId |
integer |
Yes | Group ID |
title |
string |
Yes | New task group name |
Response
Property Name | Type | Description |
---|---|---|
actorId |
integer |
ID of the user that updated the task group name |
companyId |
integer |
Company ID |
groupId |
integer |
Task group ID |
title |
string |
Task group name |
Creating Task Groups
Sample request
curl -X POST "https://my.mellow.io/api/customer/task-groups"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
-d "{
"title": "new task group"
}"
Sample response
HTTP status code: 200 OK
{
"actorId": 100740,
"companyId": 2955,
"title": "new task group"
}
This method is used to create a task group.
Request
HTTP Request
Request body
Parameter | Type | Required | Description |
---|---|---|---|
title |
string |
Yes | New task group name |
Response
Property Name | Type | Description |
---|---|---|
actorId |
integer |
ID of the user that requested to create the tasks |
companyId |
integer |
Company ID |
title |
string |
Task group name |
Deleting Task Groups
Sample request
curl -X DELETE "https://my.mellow.io/api/customer/task-groups"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
-d "{
"groupId": 650
}"
Sample response
HTTP status code: 200 OK
{
"actorId": 100740,
"companyId": 2955,
"groupId": 650
}
This method is used to delete a task group.
Request
HTTP Request
Request body
Parameter | Type | Required | Description |
---|---|---|---|
groupId |
integer |
Yes | Task group ID |
Response
Property Name | Type | Description |
---|---|---|
actorId |
integer |
ID of the user that requested to create the tasks |
companyId |
integer |
Company ID |
groupId |
integer |
Task group ID |
Task Files
Adding Files to Task
Sample request
curl -X POST "https://my.mellow.io/api/customer/tasks/files"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-d '{
"uuid": "123e4567-e89b-12d3-a456-426655440000",
"file": "/Users/solar/tmp/1c_report_example.xml",
"type": "5"
}'
Sample response
HTTP status code: 200 OK
This method is used to add files to the task.
Request
HTTP Request
Request body
Parameter | Type | Required | Description |
---|---|---|---|
file |
string |
Yes | File path (for example, /Users/solar/tmp/1c_report_example.xml ) |
taskId |
integer |
Either taskId or uuid is required |
Task ID. To retrieve a list of tasks, use this request. |
uuid |
string |
Either taskId or uuid is required |
Task's UUID. |
type |
integer |
Yes | File type. Possible values:
|
Response
A successful request returns an empty response.
Freelancers
This section details methods for managing freelancers, including:
Retrieving Freelancer List
Sample request
curl -X GET "https://my.mellow.io/api/customer/freelancers?filter[taxationStatusId]=1"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
Sample response
HTTP status code: 200 OK
{
"items": [
{
"id": 1,
"uuid": "9b2cf17c-8f33-4e7a-89b4-c5a1d2630de4",
"email": "[email protected]",
"name": "Alexey Mironov",
"taxationStatusId": 3,
"taxationBlockedTill": "2022-12-31",
"categoryTitle": "Consultant",
"categoryTitleEn": "Consultant",
"details": {
"firstName": "Alexey",
"lastName": "Mironov",
"note": "Financial issues specialist",
"specialization": "Financial consultant"
},
"country": "RU",
"isVerified": true,
"isInviteSent": true,
"inviteSentAt": "2021-12-23T18:48:40.800Z",
"registerDate": "2021-12-23T18:48:40.800Z",
"isRegistered": true
}
],
"pagination": {
"count": 20,
"total": 41,
"perPage": 20,
"page": 1,
"pages": 3
}
}
This request is used to retrieve a list of freelancers.
Request
HTTP Request
Query parameters
Parameter | Type | Required | Description |
---|---|---|---|
filter[taxationStatusId] |
integer |
No | Tax status ID. Possible values:
|
filter[isVerified] |
boolean |
No | Indicates whether the freelancer account is verified |
filter[isInviteEmailSent] |
boolean |
No | Indicates whether an invite has been sent to the freelancer |
filter[dateInvitedFrom] |
string |
No | Invite date (start of interval) |
filter[dateInvitedTo] |
string |
No | Invite date (end of interval) |
page |
integer |
No | Page number for page output |
size |
integer |
No | Number of items per page (20 by default, 500 maximum) |
Response
Property Name | Type | Description |
---|---|---|
items |
list |
Freelancer list |
items.id |
integer |
Freelancer ID |
items.uuid |
uuid |
Freelancer UUID |
items.email |
string |
Freelancer's email |
items.name |
string |
Freelancer name |
items.taxationStatusId |
integer |
Freelancer's tax status |
items.taxationBlockedTill |
integer |
Date until which the tax status cannot be changed |
items.categoryTitle |
string |
Freelancer specialization |
items.categoryTitleEn |
string |
Specialization name in English |
items.details |
object |
Freelancer's personal details |
items.details.firstName |
string |
Freelancer's first name |
items.details.lastName |
string |
Freelancer's last name |
items.details.note |
string |
Freelancer description |
items.details.specialization |
string |
Freelancer specialization |
items.country |
string |
Code of the freelancer's country (two letters, like AM for Armenia) |
items.isVerified |
boolean |
Indicates whether the account is verified |
items.isInviteSent |
boolean |
Indicates that an invite has been sent |
items.inviteSentAt |
string |
Date when the invite was sent |
items.registerDate |
string |
Registration date |
items.isRegistered |
boolean |
Indicates that the freelancer has accepted the invite and provided personal details |
items.isTaxPaymentAllowed |
boolean |
Indicates whether automatic tax payment is enabled |
pagination |
list |
Paginated output |
pagination.count |
integer |
Number of items returned |
pagination.total |
integer |
Total items available with the requested filter |
pagination.perPage |
integer |
Number of items per page |
pagination.page |
integer |
Current page number |
pagination.pages |
integer |
Total pages |
Finding Freelancers by Email
Sample request
curl -X GET "https://my.mellow.io/api/customer/freelancer-by-email/{email}"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
Sample response
HTTP status code: 200 OK
{
"id": 12,
"email": "[email protected]",
"name": "Michael Adams",
"taxationStatusId": 0,
"taxationBlockedTill": "",
"categoryTitle": "Developer",
"categoryTitleEn": "Developer",
"details": {
"firstName": "Michael",
"lastName": "Adams",
"note": "Experienced in building scalable web applications using modern technologies like React, Node.js, and PostgreSQL.",
"specialization": "Full-Stack Developer"
},
"country": "US",
"isVerified": true,
"isInviteSent": true,
"inviteSentAt": "2021-12-23T18:48:40.800Z",
"registerDate": "2021-12-23T18:48:40.800Z",
"isRegistered": true
}
This request is used to find a freelancer by their email.
Request
HTTP Request
Path-parameters
As a path parameter, you must pass freelancer's email.
Response
Property Name | Type | Description |
---|---|---|
id |
integer |
Freelancer ID |
uuid |
integer |
Freelancer UUID |
email |
string |
Freelancer's email |
name |
string |
Freelancer name |
taxationStatusId |
integer |
Freelancer's tax status |
taxationBlockedTill |
integer |
Date until which the tax status cannot be changed |
categoryTitle |
string |
Freelancer specialization |
categoryTitleEn |
string |
Specialization name in English |
details |
object |
Freelancer's personal details |
details.firstName |
string |
Freelancer first name |
details.lastName |
string |
Freelancer's last name |
details.note |
string |
Freelancer description |
details.specialization |
string |
Freelancer specialization |
country |
string |
Code of the freelancer's country (e.g., "AM" for Armenia) |
isVerified |
boolean |
Indicates whether the account is verified |
isInviteSent |
boolean |
Indicates that an invite has been sent |
inviteSentAt |
string |
Date when the invite was sent |
registerDate |
string |
Registration date |
isRegistered |
boolean |
Indicates that the freelancer has accepted the invite |
isTaxPaymentAllowed |
boolean |
Indicates whether automatic tax payment is enabled |
emailConfirmationStatus |
boolean |
Indicates whether the freelancer's email is confirmed |
phoneConfirmationStatus |
boolean |
Indicates whether the freelancer's phone number is confirmed |
Finding Freelancers by phone number
Sample request
curl -X GET "https://my.mellow.io/api/customer/freelancer-by-phone/{phone number}"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
Sample response
HTTP status code: 200 OK
{
"id": 45,
"email": "[email protected]",
"name": "Alex Smith",
"taxationStatusId": 2,
"taxationBlockedTill": "2023-10-01",
"categoryTitle": "Software Engineer",
"categoryTitleEn": "Software Engineer",
"details": {
"firstName": "Alex",
"lastName": "Smith",
"note": "Skilled in backend development with extensive experience in Python, Django, and cloud infrastructure.",
"specialization": "Backend Developer"
},
"country": "CA",
"isVerified": true,
"isInviteSent": true,
"inviteSentAt": "2022-01-15T12:30:00.000Z",
"registerDate": "2022-01-16T09:00:00.000Z",
"isRegistered": true
}
This request is used to find a freelancer by their phone number.
Request
HTTP Request
Path-parameters
As a path parameter, you must pass freelancer's phone number.
Response
Property Name | Type | Description |
---|---|---|
id |
integer |
Freelancer ID |
uuid |
integer |
Freelancer UUID |
email |
string |
Freelancer's email |
name |
string |
Freelancer name |
taxationStatusId |
integer |
Freelancer's tax status |
taxationBlockedTill |
integer |
Date until which the tax status cannot be changed |
categoryTitle |
string |
Freelancer specialization |
categoryTitleEn |
string |
Specialization name in English |
details |
object |
Freelancer's personal details |
details.firstName |
string |
Freelancer first name |
details.lastName |
string |
Freelancer's last name |
details.note |
string |
Freelancer description |
details.specialization |
string |
Freelancer specialization |
country |
string |
Code of the freelancer's country (e.g., "AM" for Armenia) |
isVerified |
boolean |
Indicates whether the account is verified |
isInviteSent |
boolean |
Indicates that an invite has been sent |
inviteSentAt |
string |
Date when the invite was sent |
registerDate |
string |
Registration date |
isRegistered |
boolean |
Indicates that the freelancer has accepted the invite |
isTaxPaymentAllowed |
boolean |
Indicates whether automatic tax payment is enabled |
emailConfirmationStatus |
boolean |
Indicates whether the freelancer's email is confirmed |
phoneConfirmationStatus |
boolean |
Indicates whether the freelancer's phone number is confirmed |
Retrieving Freelancer Details
Sample request
curl -X GET "https://my.mellow.io/api/customer/freelancers/12"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
Sample response
HTTP status code: 200 OK
{
"id": 78,
"email": "[email protected]",
"name": "Sophia Johnson",
"taxationStatusId": 4,
"taxationBlockedTill": "2025-01-01",
"categoryTitle": "UI/UX Designer",
"categoryTitleEn": "UI/UX Designer",
"details": {
"firstName": "Sophia",
"lastName": "Johnson",
"note": "Expert in creating user-centered designs with a focus on usability and aesthetics. Proficient in Figma and Adobe XD.",
"specialization": "UI/UX Design"
},
"country": "DE",
"isVerified": true,
"isInviteSent": true,
"inviteSentAt": "2023-05-20T14:15:00.000Z",
"registerDate": "2023-05-21T10:00:00.000Z",
"isRegistered": true
}
This request is used to retrieve the freelancer's data using their ID or UUID.
Request
HTTP Request
Path-parameters
As a path parameter, you must pass either freelancer ID or UUID.
Response
Property Name | Type | Description |
---|---|---|
id |
integer |
Freelancer ID |
uuid |
integer |
Freelancer UUID |
email |
string |
Freelancer's email |
name |
string |
Freelancer name |
taxationStatusId |
integer |
Freelancer's tax status |
taxationBlockedTill |
integer |
Date until which the tax status cannot be changed |
categoryTitle |
string |
Freelancer specialization |
categoryTitleEn |
string |
Specialization name in English |
details |
object |
Freelancer's personal details |
details.firstName |
string |
Freelancer first name |
details.lastName |
string |
Freelancer's last name |
details.note |
string |
Freelancer description |
details.specialization |
string |
Freelancer specialization |
country |
string |
Code of the freelancer's country (e.g., "AM" for Armenia) |
isVerified |
boolean |
Indicates whether the account is verified |
isInviteSent |
boolean |
Indicates that an invite has been sent |
inviteSentAt |
string |
Date when the invite was sent |
registerDate |
string |
Registration date |
isRegistered |
boolean |
Indicates that the freelancer has accepted the invite |
isTaxPaymentAllowed |
boolean |
Indicates whether automatic tax payment is enabled |
emailConfirmationStatus |
boolean |
Indicates whether the freelancer's email is confirmed |
phoneConfirmationStatus |
boolean |
Indicates whether the freelancer's phone number is confirmed |
Inviting Freelancer
Sample request
curl -X POST "https://my.mellow.io/api/customer/freelancers"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
-d "{
"email": "[email protected]",
"note": "Experienced frontend developer with a focus on React and TypeScript.",
"inEnglish": true,
"sendEmail": true
}
"
Sample response
HTTP status code: 200 OK
{
"uuid": "b2e2671d-f850-493f-83ba-f236d3192974"
}
This request is used to add freelancers to a team. When called, this request results in a freelancer being added to your team. You can add freelancers to a team in one of two ways:
- Using their email: Pass the email in the request as detailed below. If the freelancer has not signed up for Mellow yet, they will receive an invite to the specified email and use it to provide personal details.
- Using their phone number: In this case, provide the phone number. An invitation will not be sent. After installing the application or registering for the service, the freelancer will be prompted to complete the full registration form.
The request will return the freelancer's UUID, which you can then use in the following requests: Retrieve freelancer details, Remove freelancer from team, Retrieve payment method details, and Add new payment method. Please note that you cannot set a custom UUID for a new freelancer: the service will generate it automatically when the freelancer signs up.
Request
HTTP Request
Request body
Parameter | Type | Required | Description |
---|---|---|---|
email |
string |
Required unless phone is passed |
Freelancer's email |
phone |
string |
Required unless email is passed |
Freelancer's phone number (numbers only, no spaces or special characters) |
country |
string |
Yes | Letter code of the freelancer's country. For a list of countries, see this request |
firstName |
string |
No | Freelancer's first name |
lastName |
string |
No | Freelancer's last name |
middleName |
string |
No | Freelancer's middle name |
city |
string |
No | City |
address |
string |
No | Address |
postalCode |
string |
No | Postal code |
note |
string |
No | Freelancer description |
inEnglish |
boolean |
No | Indicates that the invite must be sent in English |
sendEmail |
boolean |
No | Indicates whether an email is to be sent or not. If not, the freelancer will be added to the client's team without receiving an email. |
If the optional fields are passed, then after following the invite link or entering the phone number (if phone
was passed in the request), the freelancer will see the provided values and will only need to confirm the registration.
Response
Property Name | Type | Description |
---|---|---|
uuid |
string | Freelancer UUID |
Editing Profile Details
Sample request
curl -X PUT "https://my.mellow.io/api/customer/freelancers"
-H "Accept: application/json"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
-d "{
"freelancerId": 25,
"firstName": "Emma",
"lastName": "Brown",
"note": "Skilled backend developer with expertise in Node.js and MongoDB.",
"specialization": "Backend Developer",
"freelancerUuid": "a7d53c21-e6f2-42f8-b78b-1f9b90b4c123",
"companyId": 5
}"
This request is used to change the freelancer's profile details, such as first name, last name, specialization, or description.
Request
HTTP Request
Request body
Parameter | Type | Required | Description |
---|---|---|---|
freelancerId |
integer | Yes | Freelancer ID |
firstName |
string | No | Freelancer's first name |
lastName |
string | No | Freelancer's last name |
note |
string | No | Freelancer description |
specialization |
string | No | Freelancer's specialization. To retrieve a list of specializations, use this request. |
freelancerUuid |
uuid | No | Freelancer UUID |
companyId |
integer | No | Company ID |
Response
A successful request returns an empty response.
Requesting Code to Change Contact Details
Sample request
curl -X POST "https://my.mellow.io/api/customer/freelancers/request-code-for-change-contacts"
-H "Accept: application/json"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
-d "{
"freelancerId": 1,
"email": "[email protected]",
"phone": "+1234567890"
} "
This request allows you to update a freelancer's contact details, specifically their phone number or email. When making the request, provide the freelancer's updated contact information and their ID. Following the request, a code will be sent to the freelancer, which must then be included in the /api/customer/freelancers/change-contacts
request for further verification.
Request
HTTP Request
Request body
Parameter | Type | Required | Description |
---|---|---|---|
freelancerId |
integer |
Yes | Freelancer ID |
email |
string |
No | Freelancer's email |
phone |
string |
No | Freelancer's phone number |
Response
Upon successful execution of the request, a code is returned, which must be included in the /api/customer/freelancers/change-contacts
request (see further details below).
Confirming Change of Contact Details
Sample request
curl -X POST "https://my.mellow.io/api/customer/freelancers/change-contacts"
-H "Accept: application/json"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
-d "{
"freelancerId": 1,
"code": "123123",
}"
To change a freelancer's contact details (phone number, email, or both), use the request below in JSON format. Ensure the request includes the unique code received after the initial request to change the contact details, along with the freelancer's ID. If the code is valid, the freelancer's contact details will be updated to those specified in the change request.
Request
HTTP Request
Request body
Parameter | Type | Required | Description |
---|---|---|---|
freelancerId |
integer |
Yes | Freelancer ID |
code |
string |
Yes | Code received in the request for contact details change |
Response
A successful request returns an empty response.
Generating Verification Link
Sample request
curl -X GET "https://my.mellow.io/api/customer/freelancers/verification-link?freelancerId=123"
-H "Accept: application/json"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
Sample response
HTTP status code: 200 OK
{
"terminal_url":"https://link-to-verification-terminal"
}
Account verification is the process of confirming identity details and documents. To learn more about verification, see the Help Center.
This request is used to generate a verification link that you can send to the freelancer.
Request
HTTP Request
Query parameters
Parameter | Type | Required | Description |
---|---|---|---|
freelancerId |
integer |
Yes | Freelancer ID |
redirectUrl |
string |
No | URL where the freelancer will be redirected after verification |
Response
Property Name | Type | Description |
---|---|---|
terminal_url |
string |
URL of the verification page |
Change Freelancer's Taxation Status
Sample request
curl -X POST "https://my.mellow.io/api/customer/freelancers/change-taxation-status"
-H "Accept: application/json"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
-d "{
"freelancerId": 123,
"taxationStatusId": 1
}"
Sample request with UUID:
curl -X POST "https://my.mellow.io/api/customer/freelancers/change-taxation-status"
-H "Accept: application/json"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
-d "{
"freelancerUuid": "8e947213-c114-41ec-a9ae-0242ac130002",
"taxationStatusId": 1
}"
Sample response
HTTP status code: 200 OK
{
"linkToTerminal": "http://link.com"
}
This request is used to change the taxation status of a freelancer (applicable only to freelancers from Russia):
- If the status change to "individual" is requested, the status is changed immediately, and the response will return an empty string.
- If the status change to "self-employed" or "individual entrepreneur" is requested, the response will return a link to a page where the freelancer can enter their tax details.
For more information about taxation statuses for Russian freelancers, see here).
Request
HTTP Request
Request body
Parameter | Type | Required | Description |
---|---|---|---|
freelancerId |
integer |
One of freelancerId or freelancerUuid is required |
Freelancer ID |
freelancerUuid |
uuid |
One of freelancerId or freelancerUuid is required |
Freelancer UUID, for example, 8e947213-c114-41ec-a9ae-0242ac130002 |
taxationStatusId |
integer |
Yes | Taxation status ID. Possible values:
|
Response
Property Name | Type | Description |
---|---|---|
linkToTerminal |
string |
URL of the terminal for changing the taxation status |
Adding Freelancer's Taxpayer ID Number
Sample request
curl -X POST "https://my.mellow.io/api/customer/freelancers/add-tax-document"
-H "Accept: application/json"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
-d "{
"freelancerId": 100934,
"type": "INN",
"taxNumber": "709849850606"
} "
Sample request that includes UUID:
curl -X POST "https://my.mellow.io/api/customer/freelancers/add-tax-document"
-H "Accept: application/json"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
-d "{
"freelancerUuid": "8e947213-c114-41ec-a9ae-0242ac130002",
"type": "INN",
"taxNumber": "709849850606"
}"
This request is used to add a freelancer's taxpayer identification number, like INN for Russia or some other kind of TIN.
Request
HTTP Request
Request body
Parameter | Type | Required | Description |
---|---|---|---|
freelancerId |
integer |
Either freelancerId or freelancerUuid is required |
Freelancer ID |
freelancerUuid |
uuid |
Either freelancerId or freelancerUuid is required |
Freelancer UUID (for example, 8e947213-c114-41ec-a9ae-0242ac130002 ) |
type |
string |
Yes | Tax document type. Possible values:
|
taxNumber |
string |
Yes | Tax document number |
Response
A successful request returns an empty response.
Removing Freelancers from Team
Sample request
curl -X DELETE "https://my.mellow.io/api/customer/freelancers"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
-d "{
"freelancerId": 12
}"
Sample response
HTTP status code: 200 OK
A successful request returns an empty response.
This request is used to remove a freelancer from the team.
Request
HTTP Request
Query parameters
Parameter | Type | Required | Description |
---|---|---|---|
freelancerId |
integer |
Either freelancerId or freelancerUuid is required |
Freelancer ID |
freelancerUuid |
string |
Either freelancerId or freelancerUuid is required |
Freelancer UUID (for example, 8e947213-c114-41ec-a9ae-0242ac130002 ) |
Response
A successful request returns an empty response.
Accepting Offer Agreement
Sample request
curl -X POST "https://my.mellow.io/api/customer/freelancers/sign-agreement"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
-d "{
"templateUuid": "1as7ac19-5y33-4a3a-94b3-b4a26374de4d",
"freelancerId": 100934
}"
Sample response
HTTP status code: 200 OK
A successful request returns an empty response.
This request allows you to sign the offer agreement on behalf of the freelancer. The request that checks for new offers returns the offer ID, which needs to be provided in the Accepting Offer Agreement request. Additionally, a link for viewing the offer is provided, so you can show it to the freelancer.
Request
HTTP Request
Request body
Parameter | Type | Required | Description |
---|---|---|---|
freelancerId |
integer |
Either freelancerId or freelancerUuid is required |
Freelancer ID |
freelancerUuid |
uuid |
Either freelancerId or freelancerUuid is required |
Freelancer UUID (for example, 8e947213-c114-41ec-a9ae-0242ac130002 ) |
templateUuid |
uuid |
Yes | Offer UUID |
Response
A successful request returns an empty response.
Finances
In Mellow, balance is the user's funds in the system. When it comes to the functions and features it offers to freelancers and companies, it is similar to a bank account. Each freelancer has three balances, each in a different currency: rubles, dollars, and euros. A company can only have a balance in one of those currencies. For that reason, requests for information on a freelancer's balance always return information only on the balance whose currency is the same as the company's.
This section contains the following instructions:
Creating Payout for Task
Sample request
curl --location
--request POST 'https://my.mellow.io/api/customer/tasks/payout' \
--data-raw '{
"taskId": 583695,
"payoutEndpointType": 1,
"payoutEndpointId": 79093
}'
Sample response
HTTP status 200 OK
A successful request returns an empty response.
This request is used to transfer the payment for a paid task from the freelancer's balance to their bank card, bank account, or e-wallet. You can only use this request to send funds for a paid task: you cannot just transfer funds that are not tied to any task from the freelancer's balance. In the request, pass the task ID and the target payment method. As an additional parameter, you can specify the base currency to be converted to the target currency. For example, a withdrawal from a ruble-denominated balance to a Kazakhstani bank card requires a conversion to euros, otherwise no payment will occur.
Request
HTTP Request
Request body
Name | Type | Required | Description |
---|---|---|---|
taskId |
integer |
Either taskId or uuid is required |
Task ID. To retrieve a list of tasks, use this request. |
uuid |
string |
Either taskId or uuid is required |
Task UUID |
payoutEndpointType |
string |
Yes | Payment method type. Possible values:
|
payoutEndpointId |
integer |
Yes | ID of the payment method added by the freelancer. You can either add a new payment method or select a payment method from those already added by the freelancer. |
currencyId |
integer |
No | ID of the target currency. To view ID values, use the request for retrieving a list of currencies. |
Response
A successful request returns an empty response.
Retrieving Payout Status Using Task Number
Sample request
curl --location
--request GET 'https://my.mellow.io/api/customer/tasks/payout/432453' \
Sample response
HTTP status 200 OK
{ "payoutStatus": 2 }
This request is used to retrieve the payout status. After creating a payout, you can call this request to verify that the payout has been completed and the money has reached the freelancer.
Request
HTTP Request
Path-parameters
As a path parameter, you must pass either Task ID or UUID. To retrieve a list of tasks, use this request.
Response
Property Name | Type | Description |
---|---|---|
payoutStatus |
integer |
Payout status. Possible values:
|
Retrieving Transaction List
Sample request
curl --location
--request GET 'https://my.mellow.io/api/customer/transactions' \
Sample response
HTTP status 200 OK
{ "items": [ { "id": 1710153, "type": 2, "amount": 1030, "createdAt": "2021-01-28 10:34:12", "currency": { "currency": "RUB", "id": 1 }, "balanceId": 246709 } ], "pagination": { "count": 20, "total": 383, "perPage": 20, "page": 1, "pages": 20 } }
This request is used to retrieve a list of all transactions.
Request
HTTP Request
Request body
There are no additional request parameters.
Response
Property Name | Type | Description |
---|---|---|
id |
integer |
Transaction ID |
type |
integer |
Transaction type. Possible values:
|
amount |
float |
Transaction amount |
createdAt |
string |
Transaction date |
currency.currency |
string |
Currency name |
paycurrency.id |
integer |
Currency ID |
balanceId |
integer |
Balance ID |
Retrieving Freelancer's Payment Methods
Sample request
curl --location
--request GET 'https://my.mellow.io/api/customer/freelancers/payout-endpoints?freelancerId=1' \
Sample response
HTTP status 200 OK
{ "wallets": [ { "createdAt": "2021-07-20 06:33:14", "currency": { "currency": "RUB", "id": 1 }, "id": 48998, "number": "2099772984", "status": 1, "walletType": 2, "type": 2, "ownerId": 100870, "autoPay": true } ], "cards": [ { "createdAt": "2021-01-25 10:32:47", "currency": { "currency": "EUR", "id": 3 }, "expire": "03/26", "holder": "DINA BOOM", "id": 79082, "number": "5213 24** **** 9877", "status": 4, "cardType": 1, "type": 1, "ownerId": 100870, "country": "RU", "autoPay": true } ], "ibans": [] }
his request is used to retrieve the list of payment methods available to a freelancer.
Request
HTTP Request
Query parameters
Name | Type | Required | Description |
---|---|---|---|
freelancerId |
integer |
Either freelancerId or freelancerUuid is required |
Freelancer ID |
freelancerUuid |
string |
Either freelancerId or freelancerUuid is required |
Freelancer UUID (for example, 8e947213-c114-41ec-a9ae-0242ac130002 ) |
Response
Property Name | Type | Description |
---|---|---|
wallets |
string |
E-wallets added by the freelancer |
wallets.createdAt |
string |
Date added |
wallets.currency |
object |
Currency |
wallets.currency.currency |
string |
Currency name |
wallets.currency.id |
integer |
Currency ID |
wallets.id |
integer |
E-wallet ID |
wallets.number |
string |
E-wallet number |
wallets.status |
string |
Status |
wallets.walletType |
string |
E-wallet type. Possible values:
|
wallets.type |
string |
Payment method type. Possible values:
|
wallets.ownerId |
string |
Freelancer ID |
wallets.autoPay |
boolean |
Indicates the activation of automatic payments for the payment method. |
cards |
string |
URL of the page for adding a payment method |
cards.createdAt |
string |
Date added |
cards.currency |
object |
Currency |
cards.currency.currency |
string |
Currency name |
cards.currency.id |
integer |
Currency ID |
cards.expire |
string |
Card expiration date |
cards.holder |
string |
Cardholder's first and second name |
cards.id |
string |
Card ID |
cards.number |
string |
Card number (returns the first 6 and last 4 digits) |
cards.status |
string |
Status. Possible values:
|
cards.cardType |
string |
Bank card type. Possible values:
|
cards.type |
string |
Payment method type. Possible values:
|
cards.ownerId |
string |
Freelancer ID |
cards.country |
string |
Bank card's country of origin |
cards.autoPay |
boolean |
Indicates the activation of automatic payments for the payment method. |
iban |
string |
Bank accounts added by the freelancer |
iban.createdAt |
string |
Date added |
iban.currency |
object |
Currency |
iban.currency.currency |
string |
Currency name |
iban.currency.id |
integer |
Currency ID |
iban.id |
integer |
Bank account ID |
iban.number |
string |
Bank account number |
iban.status |
string |
Status. Possible values:
|
iban.bankAccountType |
string |
Account type. Possible values:
|
iban.type |
string |
Payment method type. Possible values:
|
iban.ownerId |
integer |
Freelancer ID |
iban.autoPay |
boolean |
Indicates the activation of automatic payments for the payment method. |
Adding Bank Card
Sample request
curl --location
--request POST 'https://my.mellow.io/api/customer/freelancers/cards' \
--data-raw '{
"code": 583695,
"freelancerId": 1
}'
Sample response
HTTP status 200 OK
{
"redirect": "https://link-to-payment-terminal"
}
This request is used to add a new payment method for a freelancer. It returns a link to the page for adding a payment method. Before calling the request, you also need to request a code that will be sent to the freelancer's phone number. Adding a new payment method is done as follows:
- Request a code to be sent to the freelancer's phone.
- Call the request to add a payment method by passing the code sent in the previous step as the input parameter. Next, the request returns a link to the page where the freelancer can enter payment method details.
After that, the freelancer fills in the details of a new payment method.
Request
HTTP Request
Request body
Name | Type | Required | Description |
---|---|---|---|
code |
integer |
Yes | Code sent to the freelancer's phone number |
freelancerId |
integer |
Either freelancerId or freelancerUuid is required |
Freelancer ID |
freelancerUuid |
string |
Either freelancerId or freelancerUuid is required |
Freelancer UUID (for example, 8e947213-c114-41ec-a9ae-0242ac130002 ) |
redirectUrl |
string |
No | URL where the freelancer is redirected after linking a payment method |
Response
Property Name | Type | Description |
---|---|---|
redirect |
string |
URL of the page for adding a payment method |
uuid |
string |
Payment method UUID (for example, 8e947213-c114-41ec-a9ae-0242ac130002 ) |
Adding Bank Account
Sample request
curl --location
--request POST 'https://my.mellow.io/api/customer/freelancers/bank-accounts' \
--data-raw '{
"code": 583695,
"freelancerId": 1
}'
Sample response
HTTP status 200 OK
{
"redirect": "https://link-to-payment-terminal"
}
This request is used to add a new bank account for a freelancer. It returns a link to the page for adding a payment method. Before calling the request, you also need to request a code that will be sent to the freelancer's phone number. Adding a new bank account is done as follows:
- Request a code to be sent to the freelancer's phone.
- Call the request to add a payment method by passing the code sent in the previous step as the input parameter. Next, the request returns a link to the page where the freelancer can enter payment method details.
After that, the freelancer fills in the details of a new payment method.
Request
HTTP Request
Request body
Name | Type | Required | Description |
---|---|---|---|
code |
integer |
Yes | Code sent to the freelancer's phone number |
freelancerId |
integer |
Either freelancerId or freelancerUuid is required |
Freelancer ID |
freelancerUuid |
string |
Either freelancerId or freelancerUuid is required |
Freelancer UUID (for example, 8e947213-c114-41ec-a9ae-0242ac130002 ) |
bankAccountType |
integer |
Yes | Bank account type. Possible values:
|
redirectUrl |
integer |
No | URL where the freelancer is redirected after linking a payment method |
uuid |
string |
No | Payment method UUID (for example, 8e947213-c114-41ec-a9ae-0242ac130002 ) |
Response
Property Name | Type | Description |
---|---|---|
redirect |
string |
URL of the page for adding a payment method |
Adding E-wallet
Sample request
curl --location
--request POST 'https://my.mellow.io/api/customer/freelancers/wallets' \
--data-raw '{
"code": 583695,
"freelancerId": 1
}'
Sample response
HTTP status 200 OK
{
"redirect": "https://link-to-payment-terminal"
}
This request is used to add a new e-wallet for the freelancer. It returns a link to the page for adding a payment method. Before calling the request, you also need to request a code that will be sent to the freelancer's phone number. Adding a new e-wallet is done as follows:
- Request a code to be sent to the freelancer's phone.
- Call the request to add a payment method by passing the code sent in the previous step as the input parameter. Next, the request returns a link to the page where the freelancer can enter payment method details.
After that, the freelancer fills in the details of a new payment method.
Request
HTTP Request
Request body
Name | Type | Required | Description |
---|---|---|---|
code |
integer |
Yes | Code sent to the freelancer's phone number |
freelancerId |
integer |
Either freelancerId or freelancerUuid is required |
Freelancer ID |
freelancerUuid |
string |
Either freelancerId or freelancerUuid is required |
Freelancer UUID (for example, 8e947213-c114-41ec-a9ae-0242ac130002 ) |
walletType |
integer |
Yes | E-wallet type. Possible values:
|
redirectUrl |
integer |
No | URL where the freelancer is redirected after linking a payment method |
Response
Property Name | Type | Description |
---|---|---|
redirect |
string |
URL of the page for adding a payment method |
uuid |
string |
Payment method UUID (for example, 8e947213-c114-41ec-a9ae-0242ac130002 ) |
Deleting Bank Card
Sample request
curl --location
--request DELETE 'https://my.mellow.io/api/customer/freelancers/cards/123?freelancerId=123' \
Sample response
HTTP status 200 OK
This request is used to delete a bank card.
Request
HTTP Request
Path-parameters
As a path parameter, you must pass bank card ID.
Query parameters
Name | Type | Required | Description |
---|---|---|---|
freelancerId or freelancerUuid |
integer |
Yes | Freelancer ID or UUID |
Response
A successful request returns an empty response.
Deleting E-wallet
Sample request
curl --location
--request DELETE 'https://my.mellow.io/api/customer/freelancers/wallets/123?freelancerId=123' \
Sample response
HTTP status 200 OK
This request is used to delete a freelancer's e-wallet.
Request
HTTP Request
Path-parameters
As a path parameter, you must pass e-wallet ID.
Query parameters
Name | Type | Required | Description |
---|---|---|---|
freelancerId or freelancerUuid |
integer |
Yes | Freelancer ID or UUID |
Response
A successful request returns an empty response.
Deleting Bank Account
Sample request
curl --location
--request DELETE 'https://my.mellow.io/api/customer/freelancers/bank-accounts/123?freelancerId=123' \
Sample response
HTTP status 200 OK
This request is used to delete a freelancer's bank account.
Request
HTTP Request
Path-parameters
As a path parameter, you must pass bank account ID.
Query parameters
Name | Type | Required | Description |
---|---|---|---|
freelancerId or freelancerUuid |
integer |
Yes | Freelancer ID or UUID |
Response
A successful request returns an empty response.
Requesting Code for Adding New Payment Method
Sample request
curl --location
--request POST 'https://my.mellow.io/api/customer/freelancers/request-code-for-new-payout-endpoint' \
--data-raw '{
"freelancerId": 583695
}'
Sample response
HTTP status 200 OK
{
"type": "SMS",
"number": "412341"
}
This request is used to send a verification code to the freelancer's phone number. To add a new payment method, the freelancer must confirm the action.
Request
HTTP Request
Request body
Name | Type | Required | Description |
---|---|---|---|
freelancerId |
integer |
Either freelancerId or freelancerUuid is required |
Freelancer ID |
freelancerUuid |
string |
Either freelancerId or freelancerUuid is required |
Freelancer UUID (for example, 8e947213-c114-41ec-a9ae-0242ac130002 ) |
Response
Property Name | Type | Description |
---|---|---|
type |
string |
Message type (SMS or Google) |
number |
string |
Freelancer's phone number (if the message type is SMS) |
Company
This section details methods used for managing a company.
Retrieving User's Companies
Sample request
curl -X GET "https://my.mellow.io/api/customer/companies"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
Sample response
HTTP status code: 200 OK
{
"items": [
{
"id": 2955,
"companyName": "Skyline Ltd",
"brandName": "Skyline",
"safeDealEnabled": true,
"isDefault": true,
"currency": {
"currency": "USD",
"id": 2
}
}
],
"pagination": {
"count": 1,
"total": 1,
"perPage": 20,
"page": 1,
"pages": 1
}
}
This request is used to retrive the companies of an authorized user.
Request
HTTP Request
Parameters
There are no additional request parameters.
Response
Property Name | Type | Description |
---|---|---|
id |
integer |
Company ID |
companyName |
string |
Company name |
brandName |
string |
Project name |
safeDealEnabled |
boolean |
Indicates whether the Secure Deal feature is enabled |
isDefault |
boolean |
Indicates whether this is the default company |
currency |
object |
Currency |
currency.currency |
string |
Currency name |
currency.id |
integer |
Currency ID |
Changing Company
Sample request
curl -X PATCH "https://my.mellow.io/api/customer/companies"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-d "{
"companyId": 123
}"
Sample response
HTTP status code: 200 OK
{
"token": "eyJhbGciOiJIUzUxMiIsI...",
"refreshToken": "c84f18a2-c6c7-4850-be15-93f9cbaef3b3"
}
This request is used to select a company: if you have added several companies to your account, this is the way you select one of them. The request returns a new JWT that is to be used for authenticating all requests that follow.
Request
HTTP Request
Request body
Parameter | Type | Required | Description |
---|---|---|---|
companyId |
integer |
Yes | Company ID. The list of companies that are available to you is returned with this request |
Response
Property Name | Type | Description |
---|---|---|
token |
string |
JWT |
refreshToken |
string |
JWT used for token update |
Retrieving Company Balance
Sample request
curl -X GET "https://my.mellow.io/api/customer/balance
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
Sample response
HTTP status code: 200 OK
{
"currency": {
"currency": "RUB",
"id": 1
},
"showVat": true,
"balanceAmount": 1067273.53,
"balanceAmountVat": 213454.71,
"holdAmount": 149225.08,
"holdAmountVat": 29845.02
}
This request is used to retrieve the company's balance.
Request
HTTP Request
Parameters
There are no additional request parameters.
Response
Property Name | Type | Description |
---|---|---|
currency |
object |
Currency |
currency.currency |
string |
Currency name |
currency.id |
integer |
Currency ID |
showVat |
boolean |
Indicates whether VAT is displayed within tasks |
balanceAmount |
string |
Balance |
balanceAmountVat |
string |
VAT on the balance |
holdAmount |
string |
Held (escrowed) amount |
holdAmountVat |
string |
Held (escrowed) VAT amount |
Documents
This section details methods used for managing documents.
Retrieving Document List
Sample request
curl -X GET "https://my.mellow.io/api/customer/documents"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
Sample response
HTTP status code: 200 OK
{
"items": [
{
"fileId": 252345,
"type": 6,
"documentId": 10743,
"invoiceStatusId": 1,
"reportStatusId": null,
"amount": 100,
"number": "2955-211126-18",
"currency": {
"currency": "RUB",
"id": 1
},
"createdAt": "2021-11-26 04:54:39",
"topUpBalanceDate": "-0001-11-30 00:00:00",
"sfFileId": null
}
}
This request is used to retrive a list of documents.
Request
HTTP Request
Query parameters
Parameter | Type | Required | Description |
---|---|---|---|
filter[type] |
integer |
No | Document type. Possible values:
|
filter[dateFrom] |
date |
No | Document's "effective from" date (start of interval) |
filter[dateTo] |
date |
No | Document's "effective until" date (end of interval) |
sort |
string |
No | Parameter for sorting results. Possible values:
|
direction |
string |
No | Sort order. Possible values:
|
Response
Property Name | Type | Description |
---|---|---|
fileId |
integer |
File ID |
type |
integer |
Document type. Possible values:
|
documentId |
integer |
Document ID |
invoiceStatusId |
integer |
Invoice status ID |
reportStatusId |
integer |
Certificate status ID |
amount |
string |
Document amount |
number |
string |
Document number |
currency |
object |
Currency |
currency.currency |
string |
Currency name |
currency.id |
string |
Currency ID |
createdAt |
string |
Date of document generation |
topUpBalanceDate |
string |
Balance top-up date |
sfFileId |
boolean |
Invoice ID (applies to invoices generated for balance funding operations) |
Downloading Documents
Sample request
curl -X GET "https://my.mellow.io/api/customer/documents/download"
-H "accept: */*"
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..."
-H "Content-Type: application/json"
Sample response
HTTP status code: 200 OK
A successful request returns an empty response
This request is used to download documents. After the request is called, a document download link is sent to your email.
Request
HTTP Request
Query parameters
Parameter | Type | Required | Description |
---|---|---|---|
filter[type] |
integer |
No | Document type. Possible values:
|
filter[dateFrom] |
date |
No | Document's "effective from" date (start of interval) |
filter[dateTo] |
date |
No | Document's "effective until" date (end of interval) |
Response
A successful request returns an empty response, initiating the sending of an email that contains a link for document download (in ZIP format).
User Profile
The section lists the requests for working with the user profile.
Retrieving Personal Details
Sample request
curl --location
--request POST 'https://my.mellow.io/api/profile' \
Sample response
HTTP status code: 200 OK
{
"languageStringValue": "EN",
"name": "John Doe",
"postCode": "90210",
"physicalAddress": "Los Angeles, Sunset Blvd 123",
"city": "Los Angeles",
"inn": "456456456",
"ip": "192.168.0.1",
"birthDate": "1985-07-12",
"gridsSettings": "{}",
"loginNotification": true,
"id": 100,
"uuid": "2b69eb5d-e0e3-11ec-95b5-fa84c4fedfee",
"email": "[email protected]",
"username": "[email protected]",
"firstName": "John",
"middleName": "",
"lastName": "Doe",
"regDate": "2020-10-30",
"twoFaMethod": "sms",
"taxationStatus": 1,
"phone": "+1-555-5555",
"country": "US",
"state": null,
"flags": 0,
"type": "customer",
"defaultSmsGate": null,
"language": "EN",
"isVerified": false,
"specialization": null
}
This method is used to retrieve the personal details of an authorized user.
Request
HTTP Request
Parameters
There are no additional request parameters. Only applicable for authorized users.
Response
Name | Type | Description |
---|---|---|
postCode |
string |
User's postal code |
physicalAddress |
string |
User's address |
city |
string |
City |
inn |
string |
INN (taxpayer ID, applicable for users in Russia) |
ip |
string |
Allowed IP addresses |
birthDate |
string |
Date of birth |
gridsSettings |
object |
[System field] Account interface settings |
id |
integer |
User ID |
email |
string |
User's email |
username |
string |
User's login |
firstName |
string |
Username |
middleName |
string |
User's middle name |
lastName |
string |
User's last name |
regDate |
string |
Registration date |
twoFaMethod |
boolean |
Indicates whether two-factor authentication is enabled |
taxationStatus |
string |
User's tax status (applies to freelancers only) |
phone |
string |
User's phone number |
country |
string |
User's country |
state |
string |
User's region |
flags |
string |
[System field] |
type |
string |
[System field] User type (client or freelancer) |
language |
string |
User's interface language |
isVerified |
string |
Indicates whether the user is verified (applies to freelancers only) |
Changing Language
Sample request
curl -X PUT "https://my.mellow.io/api/profile/language" \
-H "accept: */*" \
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJ..." \
-H "Content-Type: application/json" \
-d '{
"language": "EN"
}'
Sample response
HTTP status code: 200 OK
A successful request should return an empty response.
This method is used to change the language for all messages, task categories, and so on. The available options are Russian (RU) and English (EN).
Request
HTTP Request
Request body
Name | Type | Обязательность | Description |
---|---|---|---|
language |
string |
Yes | Language name. Possible options:
|
Response
A successful request should return an empty response.
Reference
This section lists requests for retrieving various values of different parameters (for example, currencies, deadline types, and tax statuses).
Currency List
Sample request
curl --location
--request GET 'https://my.mellow.io/api/lookups/currencies' \
Sample response
HTTP status 200 OK
{
"RUB": 1,
"USD": 2,
"EUR": 3
}
This method is used to retrieve a list of currencies and their IDs.
Request
HTTP Request
Parameters
There are no additional request parameters.
Response
Name | Type | Description |
---|---|---|
<currency code> |
integer |
Currency ID |
Currency Conversion Rate
Sample request
curl --location
--request GET 'https://my.mellow.io/api/exchanges' \
Sample response
HTTP status 200 OK
[
{
"base": {
"currency": "EUR",
"id": 3
},
"target": {
"currency": "RUB",
"id": 1
},
"rate": 79.401
},
{
"base": {
"currency": "USD",
"id": 2
},
"target": {
"currency": "RUB",
"id": 1
},
"rate": 74.329
},
{
"base": {
"currency": "EUR",
"id": 3
},
"target": {
"currency": "USD",
"id": 2
},
"rate": 1.0576
},
{
"base": {
"currency": "RUB",
"id": 1
},
"target": {
"currency": "EUR",
"id": 3
},
"rate": 81.8194
},
{
"base": {
"currency": "RUB",
"id": 1
},
"target": {
"currency": "USD",
"id": 2
},
"rate": 76.5928
},
{
"base": {
"currency": "USD",
"id": 2
},
"target": {
"currency": "EUR",
"id": 3
},
"rate": 1.0898
}
]
This method is used to retrieve the current conversion rate.
Sample conversions:
Withdrawal currency | Payout currency | Conversion rate | Calculation |
---|---|---|---|
EUR | RUB | 79.401 | 1000 EUR * 79.401 = 79401 RUB |
USD | RUB | 74.329 | 1000 USD * 74.329 = 74329 RUB |
EUR | USD | 1.0576 | 1000 EUR * 1.0576 = 1057.6 USD |
RUB | EUR | 81.8194 | 1000 RUB / 81.8194 = 12.23 EUR |
RUB | USD | 76.5928 | 1000 RUB / 76.5928 = 13.06 USD |
USD | EUR | 1.0898 | 1000 USD / 1.0898 = 917.43 EUR |
Request
HTTP Request
Parameters
There are no additional request parameters.
Response
Name | Type | Description |
---|---|---|
base.currency |
string |
Name of the base currency to be converted |
base.id |
integer |
Base currency ID |
target.currency |
string |
Name of the target currency of conversion |
target.id |
integer |
ID of the target currency of conversion |
rate |
float |
Conversion rate |
Tax Statuses
Sample request
curl --location
--request GET 'https://my.mellow.io/api/lookups/taxation-statuses' \
Sample response
HTTP status 200 OK
{
"NATURAL": 1,
"NATURAL_TITLE": "Natural person",
"SELF_EMPLOYED": 3,
"SELF_EMPLOYED_TITLE": "Self employed person",
"SOLE_PROPRIETOR": 4,
"SOLE_PROPRIETOR_TITLE": "Individual entrepreneur"
}
This method is used to retrieve tax statuses and their IDs.
Request
HTTP Request
Parameters
There are no additional request parameters.
Response
Name | Type | Description |
---|---|---|
<Tax status> |
integer |
Tax status ID |
<Tax status>_TITLE |
string |
Name of tax status |
Task Categories
Sample request
curl --location
--request GET 'https://my.mellow.io/api/customer/lookups/categories' \
Sample response
HTTP status 200 OK
{
"items": [
{
"id": 1,
"title": "Печатные СМИ",
"titleEn": "Printed mass media"
},
{
"id": 2,
"title": "Интернет-реклама",
"titleEn": "Internet advertising"
}
]
}
This method is used to retrieve task categories.
Request
HTTP Request
Parameters
There are no additional request parameters.
Response
Name | Type | Description |
---|---|---|
id |
integer |
Category ID |
title |
string |
Task category name |
titleEn |
string |
Task category name (in English) |
Names of Services and Works
Sample request
curl --location
--request GET 'https://my.mellow.io/api/lookups/services/1' \
Sample response
HTTP status 200 OK
{
"items": [
{
"id": 3,
"title": "Копирайтинг",
"titleEn": "Copywriting",
"titleDoc": "Написание текстов статей/обзоров",
"titleDocEn": "Сopywriting of texts of articles/reviews"
},
{
"id": 2,
"title": "Работы по созданию иллюстраций к текстам (включая фотографию)",
"titleEn": "Work on creation of illustrations for texts (incl. photos)",
"titleDoc": "Работы по созданию иллюстраций (включая фотографические) к текстам статей периодического СМИ",
"titleDocEn": "Work on creation of illustrations (incl. photos) for texts of articles of periodic mass media"
}
]
"pagination": {
"count": 20,
"total": 23,
"perPage": 9999,
"page": 1,
"pages": 1
}
}
This method is used to retrieve the names of the services and works for the requested task category.
Request
HTTP Request
Path-parameters
As a path parameter, you must pass task category ID.
Parameters
Name | Type | Required | Description |
---|---|---|---|
page |
integer |
No | Page number for page output |
size |
integer |
No | Number of items per page (20 by default, 500 maximum) |
Response
Name | Type | Description |
---|---|---|
id |
integer |
ID of services and/or works |
title |
string |
Name of services and/or works |
titleEn |
string |
Name of services and/or works (in English) |
titleDoc |
string |
Name of services and/or works as stated in the certificate |
titleDocEn |
string |
Name of services and/or works as stated in the certificate (in English) |
pagination |
list |
Paginated output |
pagination.count |
integer |
Number of items returned |
pagination.total |
integer |
Total items available with the requested filter |
pagination.perPage |
integer |
Number of items per page |
pagination.page |
integer |
Page number |
pagination.pages |
integer |
Total pages |
Task Attributes
Sample request
curl --location
--request GET 'https://my.mellow.io/api/lookups/service-attributes/1' \
Sample response
HTTP status 200 OK
{
"items": [
{
"id": 6,
"title": "Наименование СМИ",
"titleEn": "Name of mass media",
"type": "text"
},
{
"id": 9,
"title": "Номер издания",
"titleEn": "Issue",
"type": "text"
},
{
"id": 31,
"title": "Формат видео",
"titleEn": "Video format",
"type": "select",
"attrTypeId": 11,
"options": [
{
"id": 26,
"value": "SD",
"valueEn": "SD"
},
{
"id": 27,
"value": "HD",
"valueEn": "HD"
},
{
"id": 29,
"value": "FullHD",
"valueEn": "FullHD"
},
{
"id": 28,
"value": "UHD",
"valueEn": "UHD"
},
{
"id": 30,
"value": "4K",
"valueEn": "4K"
}
]
},
],
"pagination": {
"count": 20,
"total": 23,
"perPage": 9999,
"page": 1,
"pages": 1
}
}
This method is used to retrieve the attributes for the requested task category.
Request
HTTP Request
Path-parameters
As a path parameter, you must pass task category ID.
Parameters
Name | Type | Required | Description |
---|---|---|---|
id |
integer |
Yes | Service ID |
page |
integer |
No | Page number for page output |
size |
integer |
No | Number of items per page (20 by default, 500 maximum) |
Response
Name | Type | Description |
---|---|---|
items |
list |
List items |
items.id |
integer |
Attribute ID |
items.title |
string |
Attribute name |
items.titleEn |
string |
Attribute name (in English) |
items.attrTypeId |
integer |
Attribute type ID |
options |
object |
Attribute values (for the "select" type) |
options.id |
integer |
Value ID |
options.value |
string |
Text |
options.valueEn |
string |
Text in English |
pagination |
list |
Paginated output |
pagination.count |
integer |
Number of items returned |
pagination.total |
integer |
Total items available with the requested filter |
pagination.perPage |
integer |
Number of items per page |
pagination.page |
integer |
Page number |
pagination.pages |
integer |
Total pages |
Additional Documents for Task Acceptance
Sample request
curl --location
--request GET 'https://my.mellow.io/api/customer/lookups/acceptance-files' \
Sample response
HTTP status 200 OK
{
"items": [
{
"id": 1049,
"fileId": 123,
"title": "Соглашение о неразглашении (NDA)",
"titleEn": "Non-disclosure agreement"
}
]
}
This method is used to retrieve a list of documents that a freelancer must accept before working on tasks. These include NDAs and other docs. To upload a document like that to the service, please contact support.
Request
HTTP Request
Parameters
There are no additional request parameters.
Response
Name | Type | Description |
---|---|---|
id |
integer |
Document ID |
fileId |
integer |
Document file ID |
title |
string |
Document name |
titleEn |
string |
Document name (in English) |
Freelancer specializations
Sample request
curl --location
--request GET 'https://my.mellow.io/api/lookups/specializations' \
Sample response
HTTP status 200 OK
{
"items": [
{
"id": 1049,
"title": "Латвия"
}
]
}
The method is used to retrieve specializations for the freelancer.
Request
HTTP Request
Parameters
There are no additional request parameters.
Response
Name | Type | Description |
---|---|---|
id |
integer |
Specialization ID |
title |
string |
Specialization name |
titleEn |
string |
Specialization name (in English) |
Country Codes
Sample request
curl --location
--request GET 'https://my.mellow.io/api/customer/ord/get-arccw-codes' \
Sample response
HTTP status 200 OK
{
"items": [
{
"id": 1049,
"title": "Латвия"
}
]
}
This method is used to retrieve a list of countries and their identifiers from the Russian Classification of the World's Countries (OKSM).
Request
HTTP Request
Parameters
There are no additional request parameters.
Response
Name | Type | Description |
---|---|---|
id |
integer |
Country ID |
title |
string |
Country name |
WebHooks
Webhooks are messages that notify services about events within Mellow. You can add a custom URL where all event notifications will be sent. Use this request to add such a URL. After that, you can set it up in a way where only the necessary received events are processed. Mellow always sends all event notifications to the URL you added, and you can then filter those events as you wish (the name
field will help you determine event type).
Available events:
Freelancer registration. If you are working using the API, freelancers need to complete sign-up on their own. You can set up a webhook notifying you about freelancers following the email link and filling out the sign-up form.
Adding/deleting a payment method. Adding a payment method is also something freelancers do on their own, so you can set up the respective notification.
Changing the tax status of the contractor.
Sample message that is sent to the specified URL:
{
"timestamp": 1674539549,
"name": "cardAdded",
"payload": {
"ownerId": 6,
"id": 11
}
}
Parameters:
name
- Event name,payload
- Event data. Possible values include:- Notifying about a payment method being added returns the parameters
ownerId
(ID of the user that added the method) andid
(ID of the payment method). - For freelancer registration, the
uuid
of the freelancer is returned. - Changing the tax status of the contractor (only applicable for freelancers from the Russian Federation) returns the
uuid
of the freelancer and their tax status.
- Notifying about a payment method being added returns the parameters
timestamp
- Event date
Event | Description | Payload |
---|---|---|
bankAccountAdded |
Bank account added | id - Bank account ID, ownerId - Freelancer ID, uuid - Freelancer UUID |
bankAccountRemoved |
Bank account removed | id - Bank account ID, ownerId - Freelancer ID, uuid - Freelancer UUID |
cardAdded |
Payment method (bank card) added | id - Card ID, ownerId - Freelancer ID, uuid - Freelancer UUID |
cardRemoved |
Payment method (bank card) removed | id - Card ID, ownerId - Freelancer ID, uuid - Freelancer UUID |
walletAdded |
Wallet added | id - Wallet ID, ownerId - Freelancer ID, uuid - Freelancer UUID |
walletRemoved |
Wallet removed | id - Wallet ID, ownerId - Freelancer ID, uuid - Freelancer UUID |
freelancerRegistered |
Freelancer registered | uuid - Freelancer UUID |
freelancerVerified |
Freelancer successfully verified | uuid - Freelancer UUID |
taxationStatusChanged |
Freelancer taxation status changed | uuid - Freelancer UUID, taxationStatusId - New taxation status ID |
Each request carries a special X-Sign
header with a signature. The signature appears as sha256(body . secret)
, where:
secret
- is a secret key from theGET api/v1/customer/web-hook
request.body
- is the request body.
If you have several companies, setting up a webhook for each requires going to a company and calling a request to create a webhook.
If the client is not responding (or responds with an HTTP code other than 200
), Mellow will keep attempting to send the notification for the next 24 hours.
Retrieve Webhook
Sample request
curl --location
--request GET 'https://my.mellow.io/api/customer/web-hook' \
Sample response
HTTP status 200 OK
{
"url": "https://webhook.site/588190fc-47d6-47f2-bded-17216bfe6e92",
"status": "enabled",
"secret": "bb940556f36a5ae58063f151e51f5318",
"lastTriggered": null,
"lastError": null
}
This method is used to retrieve webhook details.
Request
HTTP Request
Parameters
There are no additional request parameters.
Response
Name | Type | Description |
---|---|---|
url |
string |
Target URL for notifications |
status |
string |
Status. Available options:
|
secret |
string |
Secret key to be included in each notification |
lastTriggered |
string |
Indicates when the last notification was sent |
lastError |
string |
Indicates when the last notification failed to arrive |
Create or Update Webhook
Sample request
curl --location
--request POST 'https://my.mellow.io/api/customer/web-hook' \
--data-raw '{
"status" : "enabled",
"url" : "https://test.com"
}'
Sample response
HTTP status 200 OK
This method is used to add or update a webhook. In other words, you are adding a URL where all events (such as the adding or removing of a freelancer's payment method) are to be sent. To enable or disable the sending of event notifications, pass enabled
or disabled
respectively in status
.
Request
HTTP Request
Parameters
Name | Type | Обязательность | Description |
---|---|---|---|
status |
string |
Yes | Status. Available options:
|
url |
string |
Yes | Target URL for notifications |
Response
A successful request returns an empty response.
Delete Webhook
Sample request
curl --location
--request DELETE 'https://my.mellow.io/api/customer/web-hook' \
--data-raw '{
"status" : "enabled",
"url" : "https://test.com"
}'
Sample response
HTTP status 200 OK
This method is used to delete webhooks.
Request
HTTP Request
Parameters
There are no additional request parameters.
Response
A successful request returns an empty response.
Release Notes
August 2024
Added:
- Added the
shareCommission
parameter to the tasks request, replacingcompensateWorkerServiceFee
. This new parameter allows you to share 1% of the commission with the freelancer.
June 2024
Added:
- Request to retrieve the list of specializations for the freelancer.
April 2024
Added:
- New events for webhooks: freelancer registration, changes to a freelancer's tax status, and enabling/disabling automatic tax payments.
- A parameter for compensating the freelancer's commission,
compensationType
, has been added to the task creation request. This parameter determines the type of payment method the freelancer will use to withdraw funds. Since the commission percentage varies for different payment methods, this parameter enables the precise calculation of the freelancer's commission percentage. - In the response to the payment method addition request, a
UUID
parameter for the payment method has been included. - Upon retrieving the list of payment methods, a parameter is now included that shows whether auto-payment has been enabled for each payment method.
November 2023
Added:
- A parameter
fileId
has been added to the response of the request to get a list of documents for accepting a task. - A parameter for compensating the freelancer's commission,
compensateWorkerServiceFee
, has been added to the task creation request.
October 2023
Added:
- The task payment creation request now allows for specifying a currency in which the conversion should be performed before withdrawing the funds.
August 2023
Added:
- Request to add the freelancer's tax information.
- Request to change the freelancer's personal data.
- Unallocation for ORD. See more here.
July 2023
Added:
- Request to receive payment for a task.