MENU navbar-image

Introduction

Good2Go provides an HTTP-based API for integrating with your existing backend. Many functionalities of Good2Go are accessible through these REST APIs. You can use any scripting language to call these APIs. These APIs virtually allow Good2Go to be driven by external systems like an MIS solution, or drive downstream applications such as workflow automation solutions.

This documentation aims to provide necessary information you need to work with our API.

Preface

In Good2Go, everything revolve around job, job properties and job actions. The first point for a consumer of API is to learn four basic tasks:

Two most frequently use APIs are - (1) getting list of available jobs and (2) getting intrinsic properties of job. To get list of the jobs, simply use the API: api/v1/jobs. This returns list of jobs already available on the Good2Go for the given user. Each job in the list has a unique GUID.

If the GUID of the job is known then intrinsic properties of job can be retrieve using API: api/v1/jobs/{job}. Where in {job} need to be replaced with GUID of the job. Various properties returned by this API are documented in the respective section.

There are APIs to upload and download the document associated with a job.

There are APIs to add task to a job and send reminders, or update existing task.

There are also few APIs to retrieve past history of the job, get list of reminders, get the customer associated with the job, etc.

Job and actions

Each job is associated with several properties. Some properties are fundamental properties of job. Through API, these properties can be read and updated. There are also optional properties which are available (readonly) only when certain condition is meet. The following fundamental properties are worth to mention here:

Also several actions can be performed on jobs, such as sending a review request to customer, or sending email for quote approval etc. They are defined in Job notifications section.

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer {YOUR_AUTH_KEY}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

The authentication key can be retrieved after logging to Good2Go Review application. Visit to your account page, go to API Keys section, register an application name and click Create API token.

Job management

APIs for managing jobs and job information.

Get job list

requires authentication

The jobs are filtered by query parameters as defined below.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs?date_for=sint&sort_column=created_at&sort_direction=ASC" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs"
);

const params = {
    "date_for": "sint",
    "sort_column": "created_at",
    "sort_direction": "ASC",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'date_for' => 'sint',
            'sort_column' => 'created_at',
            'sort_direction' => 'ASC',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "ac": {
        "can_assign": true,
        "can_delete": true,
        "can_edit": true,
        "can_view": true,
        "control_job": true,
        "delete_options": {
            "action": "trash"
        },
        "doc_token": null
    },
    "data": [
        {
            "ac": {
                "can_delete": true,
                "can_download": true,
                "can_edit": true,
                "can_view": true
            },
            "asg_email": "tom.jerry@tj.com",
            "c_email": "my.customer@domain.com",
            "created_at": "2022-06-20T17:05:45.000Z",
            "cus_download": true,
            "deleted_at": null,
            "due_at": "2022-06-30T14:54:22.000Z",
            "guid": "3d6daf30-6f86-4980-8b82-8520e5872986",
            "has_comment": false,
            "is_folder": false,
            "is_own": true,
            "is_portal": false,
            "is_watching": false,
            "locked": false,
            "name": "Image Test File.png",
            "newly_assigned": false,
            "parent_guid": "b17a8274-184c-4cb8-a9a7-5f006f41c0ac",
            "p_email": "partner@domain.com",
            "path_url": "http://localhost:8000/review/file/3d6daf30-6f86-4980-8b82-8520e5872986/document/Image%20Test%20File.png?version=25",
            "reminded_at": null,
            "set_to_me": false,
            "size": 14975,
            "source": "in-app",
            "status": "approved",
            "type": "image/png",
            "updated_at": "2022-06-20T17:05:45.000Z",
            "user_email": "niranjanbai@yahoo.com",
            "version": 25
        },
        {
            "ac": {
                "can_delete": true,
                "can_download": true,
                "can_edit": true,
                "can_view": true
            },
            "asg_email": null,
            "c_email": null,
            "created_at": "2022-06-17T18:28:51.000Z",
            "cus_download": false,
            "deleted_at": null,
            "due_at": null,
            "guid": "fe4a0d40-34fd-4050-90ae-f8622b5ac528",
            "has_comment": false,
            "is_folder": true,
            "is_own": true,
            "is_portal": false,
            "is_watching": false,
            "locked": true,
            "name": "Test Folder",
            "newly_assigned": false,
            "parent_guid": "b17a8274-184c-4cb8-a9a7-5f006f41c0ac",
            "p_email": null,
            "path_url": null,
            "reminded_at": null,
            "set_to_me": false,
            "size": 0,
            "source": "in-app",
            "status": "new",
            "type": null,
            "updated_at": "2022-06-17T18:28:51.000Z",
            "user_email": "niranjanbai@yahoo.com",
            "version": 1
        }
    ],
    "guid": "b17a8274-184c-4cb8-a9a7-5f006f41c0ac",
    "links": {
        "first": "http://www.good2gosoftware.com/api/v1/jobs?page=1",
        "last": "http://www.good2gosoftware.com/api/v1/jobs?page=2",
        "prev": null,
        "next": "http://www.good2gosoftware.com/api/v1/jobs?page=2"
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 2,
        "path": "http://www.good2gosoftware.com/api/v1/jobs",
        "per_page": 10,
        "to": 10,
        "total": 12
    },
    "name": "Customer Folder",
    "parent_guid": "",
    "p_email": null
}
 

Request   

GET api/v1/jobs

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

assignee   string  optional  

The assignee options [ any, none, only, user ]
any - jobs assigned to current user or owned by current user
none - jobs which are not assigned to any one
only - jobs are assigned to current user or owned by current user but assigned to another user
user - jobs assigned to current user

customer   string  optional  

Customer email address.

date_for   string  optional  

The associated field for start and end date. The valid values are [assigned_at, created_at, due_at, reviewed_at, updated_at]. By default, if parameter is not provided, it assume the dates are for 'due_at'. Example: sint

dir_only   boolean  optional  

If defined then files are ignored and only folders are selected. (Note: Its value is ignored)

end_date   string  optional  

The end date for field defined in 'date_for'. (ISO UTC datetime). For example, 2021-01-25T14:13:10.000Z.

flat   boolean  optional  

If 'true' then all kind of jobs (file and folder) are returned. See also 'parent' parameter.

file_only   boolean  optional  

If defined then folders are ignored and only files are selected. (Note: Its value is ignored)

name   string  optional  

Name of the job to match.

page   integer  optional  

The page number. Number items returns per page depends upon the settings.

parent   string  optional  

The GUID of the parent. If empty then top level items are returned.

p_email   string  optional  

Partner email address.

sort_column   string  optional  

Valid values are:

  • asg_email
  • created_at
  • customer
  • due_at
  • name
  • owner
  • p_email
  • size
  • updated_at
Example: `created_at`
sort_direction   string  optional  

Valid values are [ ASC, DESC]. Example: ASC

state   string  optional  

Supported values [ deleted ].
deleted - Returned items found in trash.

status   string  optional  

Valid values are [ new, approved, rejected, pending, processing, expired ].

start_date   string  optional  

The start date for field defined in 'date_for' (ISO UTC datetime). For example, 2021-01-25T14:13:10.000Z.

type   string  optional  

The document mime type associated with job. For example, application/pdf, text/plain, image/png, etc.

Response

Response Fields

ac   object   

Hint about access control, if any, on this returned data.

data   string[][]   

An array of jobs which match the url query

guid   string   

The GUID of the folder. This is same as parent GUID passed on the url query. It could be empty which mean the root folder.

meta   object   

The pagination information about current query

name   string   

The name of folder. It could be empty which mean the root folder.

parent_guid   string   

The GUID of the parent folder, if any.

Get job information

requires authentication

Get information about the job identified by given GUID.

The return JSON provides all the information about a given job. Few properties worth to mention here are:

  1. Status of the job,
  2. To whom the job being assigned,
  3. The customer of the job,
  4. Any comments added to the job by print buyer,
  5. The size of the job,
  6. File mime type,
  7. The current job version,
  8. Also it provides some more information about given job type (pdf, image etc.).
Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/ex" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/ex"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/ex';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "ac": {
        "can_assign": true,
        "can_delete": true,
        "can_download": false,
        "can_edit": true,
        "can_view": true,
        "control_job": true,
        "delete_options": {
            "action": "trash"
        }
    },
    "asg_email": "tom.jerry@tj.com",
    "asg_name": "Tom",
    "c_email": "my.customer@domain.com",
    "c_name": "My Customer",
    "created_at": "2021-02-06T10:21:06.000Z",
    "cus_download": true,
    "deleted_at": null,
    "due_at": null,
    "guid": "b7926eb4-6726-4917-abfd-e6eed3476e56",
    "has_comment": false,
    "is_folder": false,
    "is_own": true,
    "is_portal": false,
    "is_watching": false,
    "locked": false,
    "more_info": {
        "annotations": {
            "annot_cnt": 0,
            "annot_cnt_plus": false
        },
        "pageCount": 1,
        "pages": [
            {
                "bits": 0,
                "color": "UNKNOWN",
                "height": 922,
                "mime": "image/png",
                "width": 1616
            }
        ]
    },
    "name": "A Test File.png",
    "newly_assigned": false,
    "parent_guid": "f1096786-687e-4e40-87c7-bdb90ef631e7",
    "p_email": "forward.partner@domain.com",
    "path_url": "http://www.good2gosoftware.com/review/file/b7926eb4-6726-4917-abfd-e6eed3476e56/document/A%20Test%20File.png?version=1",
    "p_name": "DEF Printer",
    "size": 582817,
    "source": "in-app",
    "status": "new",
    "type": "image/png",
    "updated_at": "2021-02-06T10:21:06.000Z",
    "version": 1
}
 

Example response (404):


{
    "error": {
        "message": "Resource not found.",
        "status_code": 404
    }
}
 

Request   

GET api/v1/jobs/{job_guid}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: ex

Response

Response Fields

ac   object   

Hint about access control, if any, on this returned data.

asg_email   string   

The email of user to whom this job has been assigned.

assigned_at      

Job assigned/unassigned date.

c_email   string   

Customer email address.

created_at   string   

Job creation date.

cus_download   boolean   

Whether print buyer will be allowed to download the file or not. Default value is 'false'.

deleted_at   string   

When the job was moved to trash. Default value is 'null'.

due_at      

Due date of the job to complete. Default value is 'null'.

guid   string   

GUID of this job.

has_comment   boolean   

If a comment has been made on the job by print buyer or partner or assignee. Default value is 'false'.

is_folder   boolean   

If this job is a file or folder.

is_own   boolean   

If the current user own this job or not. Default value is 'true'.

is_portal   boolean   

If this folder is used for job portal.

locked   boolean   

If this job (applicable for file only) is locked or not.

more_info   object   

Extra info about this job. This is job specific (type or source or metadata).

name   string   

The name of the job.

newly_assigned   boolean   

If the job is recently assigned to a user and no update found after assignment.

parent_guid   string   

The GUID of the parent folder, if any. Default value is 'null'.

p_email   string   

The partner email for job forward.

path_url   string   

The url path to view the file. Return null in case of folder.

reviewed_at      

Job reviewed date (approved/rejected/change-requested).

size   integer   

The size of the original file associated with the job. Default value is 0 (zero). Especially in case folder it is always 0 (zero).

status   string   

The status of the job. Valid values are [ new, approved, rejected, pending, processing, expired ]. Default value is 'new'.

type   string   

The mime-type of the document associated with the job. For folder it value is null.

updated_at   string   

The last updated date and time.

version   integer   

The current version of the document. Each time a new document is uploaded the version is incremented. Default value is 1 (one).

Create a new job

requires authentication

This method can be used basically to create a folder. You can create a folder by setting the parameter 'is_folder' to 'true'.

Example request:
curl --request POST \
    "https://www.review.good2gosoftware.com/api/v1/jobs" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"parent_guid\": \"af6e3009-1f26-375d-9c4f-41378fca107b\",
    \"alt_text\": \"pohuafsifc\",
    \"c_email\": \"edwardo.abshire@example.com\",
    \"cus_download\": true,
    \"due_at\": \"2024-05-04T05:01:36.000Z\",
    \"is_folder\": \"1\",
    \"is_portal\": false,
    \"label\": \"opsxmxnnoizujobyrureuebg\",
    \"name\": \"abeqkxhjhqq\",
    \"p_email\": \"gleason.dee@example.net\",
    \"show_job_spec\": false,
    \"show_preflight\": true,
    \"status\": \"pending\",
    \"type\": \"m\"
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "parent_guid": "af6e3009-1f26-375d-9c4f-41378fca107b",
    "alt_text": "pohuafsifc",
    "c_email": "edwardo.abshire@example.com",
    "cus_download": true,
    "due_at": "2024-05-04T05:01:36.000Z",
    "is_folder": "1",
    "is_portal": false,
    "label": "opsxmxnnoizujobyrureuebg",
    "name": "abeqkxhjhqq",
    "p_email": "gleason.dee@example.net",
    "show_job_spec": false,
    "show_preflight": true,
    "status": "pending",
    "type": "m"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'parent_guid' => 'af6e3009-1f26-375d-9c4f-41378fca107b',
            'alt_text' => 'pohuafsifc',
            'c_email' => 'edwardo.abshire@example.com',
            'cus_download' => true,
            'due_at' => '2024-05-04T05:01:36.000Z',
            'is_folder' => '1',
            'is_portal' => false,
            'label' => 'opsxmxnnoizujobyrureuebg',
            'name' => 'abeqkxhjhqq',
            'p_email' => 'gleason.dee@example.net',
            'show_job_spec' => false,
            'show_preflight' => true,
            'status' => 'pending',
            'type' => 'm',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "ac": {
        "can_assign": true,
        "can_delete": true,
        "can_download": false,
        "can_edit": true,
        "can_view": true,
        "control_job": true,
        "delete_options": {
            "action": "trash"
        }
    },
    "asg_email": "tom.jerry@tj.com",
    "asg_name": "Tom",
    "c_email": "my.customer@domain.com",
    "c_name": "My Customer",
    "created_at": "2021-02-06T10:21:06.000Z",
    "cus_download": true,
    "deleted_at": null,
    "due_at": null,
    "guid": "b7926eb4-6726-4917-abfd-e6eed3476e56",
    "has_comment": false,
    "is_folder": false,
    "is_own": true,
    "is_portal": false,
    "is_watching": false,
    "locked": false,
    "more_info": {
        "annotations": {
            "annot_cnt": 0,
            "annot_cnt_plus": false
        },
        "pageCount": 1,
        "pages": [
            {
                "bits": 0,
                "color": "UNKNOWN",
                "height": 922,
                "mime": "image/png",
                "width": 1616
            }
        ]
    },
    "name": "A Test File.png",
    "newly_assigned": false,
    "parent_guid": "f1096786-687e-4e40-87c7-bdb90ef631e7",
    "p_email": "forward.partner@domain.com",
    "path_url": "http://www.good2gosoftware.com/review/file/b7926eb4-6726-4917-abfd-e6eed3476e56/document/A%20Test%20File.png?version=1",
    "p_name": "DEF Printer",
    "size": 582817,
    "source": "in-app",
    "status": "new",
    "type": "image/png",
    "updated_at": "2021-02-06T10:21:06.000Z",
    "version": 1
}
 

Example response (404):


{
    "error": {
        "message": "Resource not found",
        "status_code": 404
    }
}
 

Request   

POST api/v1/jobs

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

parent_guid   string  optional  

The parent folder GUID or null for Desktop folder. Must be a valid UUID. Example: af6e3009-1f26-375d-9c4f-41378fca107b

alt_text   string  optional  

Alternative text to describe the file or folder. Must not be greater than 255 characters. Example: pohuafsifc

c_email   string  optional  

Customer email, if any. If the email is not found then it is added to settings for future reference. Must be a valid email address. Example: edwardo.abshire@example.com

cus_download   boolean  optional  

Enable or disable download of file by customer. Example: true

due_at   string  optional  

The due date and time of the job. Must be a valid date in the format Y-m-d\TH:i:s.v\Z. Example: 2024-05-04T05:01:36.000Z

is_folder   boolean   

Whether the job is file or folder. This can be set only during job creation. It can't be changed later. It must be folder (true). Refer to job upload method for creating file. Example: 1

Must be one of:
  • 1
is_portal   boolean  optional  

Whether the folder is defined as portal or not. If folder is defined as portal then order can be created inside the portal through portal link. Example: false

label   string  optional  

Assign one of the user defined label. This field is very useful for defining internal workflow state. Must not be greater than 64 characters. Example: opsxmxnnoizujobyrureuebg

name   string  optional  

The name of the job. It is case insensitive. Must not be greater than 255 characters. Example: abeqkxhjhqq

p_email   string  optional  

Partner email, if any. If the email is not found then it is added to settings for future reference. Must be a valid email address. Example: gleason.dee@example.net

show_job_spec   boolean  optional  

Show or hide job specification data to customer. Example: false

show_preflight   boolean  optional  

Show or hide preflight summary data to customer. Example: true

status   string  optional  

The status of the job. Valid values are [ new, approved, rejected, expired ]. There are two internal status [ pending, processing ] related to workflow which can't be changed or assigned. If the request was an AJAX request, a HTTP response with a 422 status code will be returned to the user including a JSON representation of the validation errors. Example: pending

Must be one of:
  • approved
  • change-requested
  • done
  • expired
  • new
  • pending
  • processing
  • rejected
type   string  optional  

The mime data type of the job. Must not be greater than 255 characters. Example: m

Update an existing job

requires authentication

Example request:
curl --request PUT \
    "https://www.review.good2gosoftware.com/api/v1/jobs/natus" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"parent_guid\": \"3a985187-e257-384d-97eb-017247fa7f44\",
    \"alt_text\": \"enz\",
    \"c_email\": \"misael.fisher@example.net\",
    \"cus_download\": true,
    \"due_at\": \"2024-05-04T05:01:36.000Z\",
    \"is_folder\": \"1\",
    \"is_portal\": true,
    \"label\": \"zxczuzxsktlbbrueilgfgzxl\",
    \"name\": \"qeinwy\",
    \"p_email\": \"kessler.gilbert@example.org\",
    \"show_job_spec\": false,
    \"show_preflight\": false,
    \"status\": \"rejected\",
    \"type\": \"oktsqj\"
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/natus"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "parent_guid": "3a985187-e257-384d-97eb-017247fa7f44",
    "alt_text": "enz",
    "c_email": "misael.fisher@example.net",
    "cus_download": true,
    "due_at": "2024-05-04T05:01:36.000Z",
    "is_folder": "1",
    "is_portal": true,
    "label": "zxczuzxsktlbbrueilgfgzxl",
    "name": "qeinwy",
    "p_email": "kessler.gilbert@example.org",
    "show_job_spec": false,
    "show_preflight": false,
    "status": "rejected",
    "type": "oktsqj"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/natus';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'parent_guid' => '3a985187-e257-384d-97eb-017247fa7f44',
            'alt_text' => 'enz',
            'c_email' => 'misael.fisher@example.net',
            'cus_download' => true,
            'due_at' => '2024-05-04T05:01:36.000Z',
            'is_folder' => '1',
            'is_portal' => true,
            'label' => 'zxczuzxsktlbbrueilgfgzxl',
            'name' => 'qeinwy',
            'p_email' => 'kessler.gilbert@example.org',
            'show_job_spec' => false,
            'show_preflight' => false,
            'status' => 'rejected',
            'type' => 'oktsqj',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "ac": {
        "can_assign": true,
        "can_delete": true,
        "can_download": false,
        "can_edit": true,
        "can_view": true,
        "control_job": true,
        "delete_options": {
            "action": "trash"
        }
    },
    "asg_email": "tom.jerry@tj.com",
    "asg_name": "Tom",
    "c_email": "my.customer@domain.com",
    "c_name": "My Customer",
    "created_at": "2021-02-06T10:21:06.000Z",
    "cus_download": true,
    "deleted_at": null,
    "due_at": null,
    "guid": "b7926eb4-6726-4917-abfd-e6eed3476e56",
    "has_comment": false,
    "is_folder": false,
    "is_own": true,
    "is_portal": false,
    "is_watching": false,
    "locked": false,
    "more_info": {
        "annotations": {
            "annot_cnt": 0,
            "annot_cnt_plus": false
        },
        "pageCount": 1,
        "pages": [
            {
                "bits": 0,
                "color": "UNKNOWN",
                "height": 922,
                "mime": "image/png",
                "width": 1616
            }
        ]
    },
    "name": "A Test File.png",
    "newly_assigned": false,
    "parent_guid": "f1096786-687e-4e40-87c7-bdb90ef631e7",
    "p_email": "forward.partner@domain.com",
    "path_url": "http://www.good2gosoftware.com/review/file/b7926eb4-6726-4917-abfd-e6eed3476e56/document/A%20Test%20File.png?version=1",
    "p_name": "DEF Printer",
    "size": 582817,
    "source": "in-app",
    "status": "new",
    "type": "image/png",
    "updated_at": "2021-02-06T10:21:06.000Z",
    "version": 1
}
 

Example response (404):


{
    "error": {
        "message": "Resource not found",
        "status_code": 404
    }
}
 

Request   

PUT api/v1/jobs/{job_guid}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string  optional  

The GUID of the job Example: natus

Body Parameters

parent_guid   string  optional  

The parent folder GUID or null for Desktop folder. Must be a valid UUID. Example: 3a985187-e257-384d-97eb-017247fa7f44

alt_text   string  optional  

Alternative text to describe the file or folder. Must not be greater than 255 characters. Example: enz

c_email   string  optional  

Customer email, if any. If the email is not found then it is added to settings for future reference. Must be a valid email address. Example: misael.fisher@example.net

cus_download   boolean  optional  

Enable or disable download of file by customer. Example: true

due_at   string  optional  

The due date and time of the job. Must be a valid date in the format Y-m-d\TH:i:s.v\Z. Example: 2024-05-04T05:01:36.000Z

is_folder   boolean   

Whether the job is file or folder. This can be set only during job creation. It can't be changed later. It must be folder (true). Refer to job upload method for creating file. Example: 1

Must be one of:
  • 1
is_portal   boolean  optional  

Whether the folder is defined as portal or not. If folder is defined as portal then order can be created inside the portal through portal link. Example: true

label   string  optional  

Assign one of the user defined label. This field is very useful for defining internal workflow state. Must not be greater than 64 characters. Example: zxczuzxsktlbbrueilgfgzxl

name   string  optional  

The name of the job. It is case insensitive. Must not be greater than 255 characters. Example: qeinwy

p_email   string  optional  

Partner email, if any. If the email is not found then it is added to settings for future reference. Must be a valid email address. Example: kessler.gilbert@example.org

show_job_spec   boolean  optional  

Show or hide job specification data to customer. Example: false

show_preflight   boolean  optional  

Show or hide preflight summary data to customer. Example: false

status   string  optional  

The status of the job. Valid values are [ new, approved, rejected, expired ]. There are two internal status [ pending, processing ] related to workflow which can't be changed or assigned. If the request was an AJAX request, a HTTP response with a 422 status code will be returned to the user including a JSON representation of the validation errors. Example: rejected

Must be one of:
  • approved
  • change-requested
  • done
  • expired
  • new
  • pending
  • processing
  • rejected
type   string  optional  

The mime data type of the job. Must not be greater than 255 characters. Example: oktsqj

Delete an existing job

requires authentication

If the trash-on-delete is enabled in the user setting then a live job is moved to trash. If trash-on-delete is disabled in the user setting then job is permanently deleted.

If the delete method is called for a trashed job then it is permanently deleted.

Example request:
curl --request DELETE \
    "https://www.review.good2gosoftware.com/api/v1/jobs/eaque" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/eaque"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/eaque';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (404):


{
    "error": {
        "message": "Resource not found",
        "status_code": 404
    }
}
 

Example response (503):

Show headers
cache-control: no-cache, private
content-type: application/json
 

{
    "message": "Service Unavailable"
}
 

Request   

DELETE api/v1/jobs/{job_guid}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string  optional  

The GUID of the job Example: eaque

Get job's customer information

requires authentication

This returns information available about the customer associated with this job.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/occaecati/customer" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/occaecati/customer"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/occaecati/customer';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "address": "3456, N Park Meadow Way",
    "alt_phone": "1234567890",
    "c_email": "test.good2go@gmail.com",
    "c_name": "Test Good2Go",
    "city": "New York",
    "company": "Good2Go",
    "created_at": "2020-10-23T16:53:35.000Z",
    "group": "Sales Team",
    "id": 2,
    "identity": "0123456789",
    "phone": "9876543210",
    "state": "NY",
    "updated_at": "2021-02-10T11:20:44.000Z",
    "valid_email": 1,
    "zip_code": "12345"
}
 

Example response (404):


{
    "error": {
        "message": "Customer email not defined.",
        "status_code": 404
    }
}
 

Request   

GET api/v1/jobs/{job_guid}/customer

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: occaecati

Response

Response Fields

address   string   

Customer's address.

alt_phone   string   

Customer's alternative phone number.

c_email   string   

Customer's email address.

c_name   string   

Customer's name.

city   string   

Customer's city in the address.

company   string   

Customer's company name.

group   string   

Specific group assigned to customer.

identity   string   

Identity of the customer (reference to other database/record), if any.

phone   string   

Customer's phone number.

state   string   

Customer's city in the address.

zip_code   string   

Customer's zip code in the address.

Update job's customer

requires authentication

Example request:
curl --request PUT \
    "https://www.review.good2gosoftware.com/api/v1/jobs/quod/customer" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"address\": \"dolore\",
    \"c_email\": \"john16@example.net\",
    \"c_name\": \"dolor\",
    \"city\": \"nisi\",
    \"company\": \"eligendi\",
    \"group\": \"kquswwrhquejwkvqzeet\",
    \"identity\": \"akppqdupreaqoarqnybmrl\",
    \"state\": \"est\",
    \"zip_code\": \"autem\"
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/quod/customer"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "address": "dolore",
    "c_email": "john16@example.net",
    "c_name": "dolor",
    "city": "nisi",
    "company": "eligendi",
    "group": "kquswwrhquejwkvqzeet",
    "identity": "akppqdupreaqoarqnybmrl",
    "state": "est",
    "zip_code": "autem"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/quod/customer';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'address' => 'dolore',
            'c_email' => 'john16@example.net',
            'c_name' => 'dolor',
            'city' => 'nisi',
            'company' => 'eligendi',
            'group' => 'kquswwrhquejwkvqzeet',
            'identity' => 'akppqdupreaqoarqnybmrl',
            'state' => 'est',
            'zip_code' => 'autem',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "address": "3456, N Park Meadow Way",
    "alt_phone": "1234567890",
    "c_email": "test.good2go@gmail.com",
    "c_name": "Test Good2Go",
    "city": "New York",
    "company": "Good2Go",
    "created_at": "2020-10-23T16:53:35.000Z",
    "group": "Sales Team",
    "id": 2,
    "identity": "0123456789",
    "phone": "9876543210",
    "state": "NY",
    "updated_at": "2021-02-10T11:20:44.000Z",
    "valid_email": 1,
    "zip_code": "12345"
}
 

Example response (200):


{
    "address": "3456, N Park Meadow Way",
    "alt_phone": "1234567890",
    "c_email": "test.good2go@gmail.com",
    "c_name": "Test Good2Go",
    "city": "New York",
    "company": "Good2Go",
    "created_at": "2020-10-23T16:53:35.000Z",
    "group": "Sales Team",
    "id": 2,
    "identity": "0123456789",
    "phone": "9876543210",
    "state": "NY",
    "updated_at": "2021-02-10T11:20:44.000Z",
    "valid_email": 1,
    "zip_code": "12345"
}
 

Request   

PUT api/v1/jobs/{job_guid}/customer

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: quod

Body Parameters

address   string  optional  

The customer or partner mailing address. Example: dolore

alt_phone   string  optional  

Alternative phone number of customer.

c_email   string   

Email of customer. Must be a valid email address. Example: john16@example.net

c_name   string  optional  

Name of customer. Example: dolor

city   string  optional  

City in mailing address. Example: nisi

company   string  optional  

Company name. Example: eligendi

group   string  optional  

Specific group assigned to customer. Must not be greater than 64 characters. Example: kquswwrhquejwkvqzeet

identity   string  optional  

Identity of the customer (reference to other database/record), if any. Must not be greater than 64 characters. Example: akppqdupreaqoarqnybmrl

phone   string  optional  

Phone number.

state   string  optional  

State in mailing address. Example: est

zip_code   string  optional  

Zip code or PIN of mailing address. Example: autem

Response

Response Fields

address   string   

Partner's address.

alt_phone   string   

Partner's alternative phone number.

c_email   string   

Partner's email address.

c_name   string   

Partner's name.

city   string   

Partner's city in the address.

company   string   

Partner's company name.

group   string   

Specific group assigned to customer.

identity   string   

Identity of the customer (reference to other database/record), if any.

phone   string   

Partner's phone number.

state   string   

Partner's city in the address.

zip_code   string   

Partner's zip code in the address.

Unassign job's customer

requires authentication

Remove job customer associated with given job.

Example request:
curl --request DELETE \
    "https://www.review.good2gosoftware.com/api/v1/jobs/qui/customer" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/qui/customer"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/qui/customer';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (503):

Show headers
cache-control: no-cache, private
content-type: application/json
 

{
    "message": "Service Unavailable"
}
 

Request   

DELETE api/v1/jobs/{job_guid}/customer

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: qui

Create a duplicate document

requires authentication

It is often useful to be able to create a new document using a previously uploaded file. This avoid repeating the upload process.

This will copy the document and their latest preflight and image metadata, (and annotation for PDF files, if any).

Example request:
curl --request POST \
    "https://www.review.good2gosoftware.com/api/v1/jobs/magni/duplicate" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"c_email\": \"greinger@example.org\",
    \"profile\": \"add_bleed\"
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/magni/duplicate"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "c_email": "greinger@example.org",
    "profile": "add_bleed"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/magni/duplicate';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'c_email' => 'greinger@example.org',
            'profile' => 'add_bleed',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "ac": {
        "can_assign": true,
        "can_delete": true,
        "can_download": false,
        "can_edit": true,
        "can_view": true,
        "control_job": true,
        "delete_options": {
            "action": "trash"
        }
    },
    "asg_email": "tom.jerry@tj.com",
    "asg_name": "Tom",
    "c_email": "my.customer@domain.com",
    "c_name": "My Customer",
    "created_at": "2021-02-06T10:21:06.000Z",
    "cus_download": true,
    "deleted_at": null,
    "due_at": null,
    "guid": "b7926eb4-6726-4917-abfd-e6eed3476e56",
    "has_comment": false,
    "is_folder": false,
    "is_own": true,
    "is_portal": false,
    "is_watching": false,
    "locked": false,
    "more_info": {
        "annotations": {
            "annot_cnt": 0,
            "annot_cnt_plus": false
        },
        "pageCount": 1,
        "pages": [
            {
                "bits": 0,
                "color": "UNKNOWN",
                "height": 922,
                "mime": "image/png",
                "width": 1616
            }
        ]
    },
    "name": "A Test File.png",
    "newly_assigned": false,
    "parent_guid": "f1096786-687e-4e40-87c7-bdb90ef631e7",
    "p_email": "forward.partner@domain.com",
    "path_url": "http://www.good2gosoftware.com/review/file/b7926eb4-6726-4917-abfd-e6eed3476e56/document/A%20Test%20File.png?version=1",
    "p_name": "DEF Printer",
    "size": 582817,
    "source": "in-app",
    "status": "new",
    "type": "image/png",
    "updated_at": "2021-02-06T10:21:06.000Z",
    "version": 1
}
 

Example response (404):


{
    "error": {
        "message": "Resource not found",
        "status_code": 404
    }
}
 

Request   

POST api/v1/jobs/{job_guid}/duplicate

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: magni

Body Parameters

c_email   string  optional  

Customer email, if any. If the email is not found then it is added to settings for future reference. Must be a valid email address. Example: greinger@example.org

profile   string  optional  

Predefined profile to update the document. This is especially applied to PDF file. Each profile has specific purpose, output and some of them are unused. Write to support to learn more about them. Example: add_bleed

Must be one of:
  • add_bleed
  • keylines_01
  • keylines_02
  • keylines_03
  • keylines_04
  • keylines_05

Get job's partner information

requires authentication

This returns information available about the partner associated with this job.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/maxime/partner" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/maxime/partner"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/maxime/partner';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "address": "3456, N Park Meadow Way",
    "alt_phone": "1234567890",
    "c_email": "test.good2go@gmail.com",
    "c_name": "Test Good2Go",
    "city": "New York",
    "company": "Good2Go",
    "created_at": "2020-10-23T16:53:35.000Z",
    "group": "Sales Team",
    "id": 2,
    "identity": "0123456789",
    "phone": "9876543210",
    "state": "NY",
    "updated_at": "2021-02-10T11:20:44.000Z",
    "valid_email": 1,
    "zip_code": "12345"
}
 

Example response (404):


{
    "error": {
        "message": "Partner email not defined.",
        "status_code": 404
    }
}
 

Request   

GET api/v1/jobs/{job_guid}/partner

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: maxime

Response

Response Fields

address   string   

Partner's address.

alt_phone   string   

Partner's alternative phone number.

c_email   string   

Partner's email address.

c_name   string   

Partner's name.

city   string   

Partner's city in the address.

company   string   

Partner's company name.

group   string   

Specific group assigned to customer.

identity   string   

Identity of the customer (reference to other database/record), if any.

phone   string   

Partner's phone number.

state   string   

Partner's city in the address.

zip_code   string   

Partner's zip code in the address.

Update job's partner

requires authentication

Example request:
curl --request PUT \
    "https://www.review.good2gosoftware.com/api/v1/jobs/iste/partner" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"address\": \"ad\",
    \"c_email\": \"gbahringer@example.net\",
    \"c_name\": \"ut\",
    \"city\": \"ut\",
    \"company\": \"sit\",
    \"group\": \"cjtgrkdlfn\",
    \"identity\": \"gskvzulvqoous\",
    \"state\": \"provident\",
    \"zip_code\": \"veniam\"
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/iste/partner"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "address": "ad",
    "c_email": "gbahringer@example.net",
    "c_name": "ut",
    "city": "ut",
    "company": "sit",
    "group": "cjtgrkdlfn",
    "identity": "gskvzulvqoous",
    "state": "provident",
    "zip_code": "veniam"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/iste/partner';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'address' => 'ad',
            'c_email' => 'gbahringer@example.net',
            'c_name' => 'ut',
            'city' => 'ut',
            'company' => 'sit',
            'group' => 'cjtgrkdlfn',
            'identity' => 'gskvzulvqoous',
            'state' => 'provident',
            'zip_code' => 'veniam',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "address": "3456, N Park Meadow Way",
    "alt_phone": "1234567890",
    "c_email": "test.good2go@gmail.com",
    "c_name": "Test Good2Go",
    "city": "New York",
    "company": "Good2Go",
    "created_at": "2020-10-23T16:53:35.000Z",
    "group": "Sales Team",
    "id": 2,
    "identity": "0123456789",
    "phone": "9876543210",
    "state": "NY",
    "updated_at": "2021-02-10T11:20:44.000Z",
    "valid_email": 1,
    "zip_code": "12345"
}
 

Example response (200):


{
    "address": "3456, N Park Meadow Way",
    "alt_phone": "1234567890",
    "c_email": "test.good2go@gmail.com",
    "c_name": "Test Good2Go",
    "city": "New York",
    "company": "Good2Go",
    "created_at": "2020-10-23T16:53:35.000Z",
    "group": "Sales Team",
    "id": 2,
    "identity": "0123456789",
    "phone": "9876543210",
    "state": "NY",
    "updated_at": "2021-02-10T11:20:44.000Z",
    "valid_email": 1,
    "zip_code": "12345"
}
 

Request   

PUT api/v1/jobs/{job_guid}/partner

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: iste

Body Parameters

address   string  optional  

The customer or partner mailing address. Example: ad

alt_phone   string  optional  

Alternative phone number of customer.

c_email   string   

Email of customer. Must be a valid email address. Example: gbahringer@example.net

c_name   string  optional  

Name of customer. Example: ut

city   string  optional  

City in mailing address. Example: ut

company   string  optional  

Company name. Example: sit

group   string  optional  

Specific group assigned to customer. Must not be greater than 64 characters. Example: cjtgrkdlfn

identity   string  optional  

Identity of the customer (reference to other database/record), if any. Must not be greater than 64 characters. Example: gskvzulvqoous

phone   string  optional  

Phone number.

state   string  optional  

State in mailing address. Example: provident

zip_code   string  optional  

Zip code or PIN of mailing address. Example: veniam

Response

Response Fields

address   string   

Partner's address.

alt_phone   string   

Partner's alternative phone number.

c_email   string   

Partner's email address.

c_name   string   

Partner's name.

city   string   

Partner's city in the address.

company   string   

Partner's company name.

group   string   

Specific group assigned to customer.

identity   string   

Identity of the customer (reference to other database/record), if any.

phone   string   

Partner's phone number.

state   string   

Partner's city in the address.

zip_code   string   

Partner's zip code in the address.

Unassign job's partner

requires authentication

Remove job partner associated with given job.

Example request:
curl --request DELETE \
    "https://www.review.good2gosoftware.com/api/v1/jobs/quia/partner" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/quia/partner"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/quia/partner';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (503):

Show headers
cache-control: no-cache, private
content-type: application/json
 

{
    "message": "Service Unavailable"
}
 

Request   

DELETE api/v1/jobs/{job_guid}/partner

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: quia

File upload

APIs to upload a new document or update an existing document in a job.

Upload and create a file

requires authentication

Example request:
curl --request POST \
    "https://www.review.good2gosoftware.com/api/v1/upload" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "comments=rem"\
    --form "default[comments]="\
    --form "default[task]=1"\
    --form "default[reviewers]="\
    --form "schedule=tenetur"\
    --form "task[category]=ad"\
    --form "task[due_at]=alias"\
    --form "task[req_confirm]=1"\
    --form "task[status]=et"\
    --form "reason=send-message"\
    --form "recipient=qui"\
    --form "reviewers[]=at"\
    --form "parent=mollitia"\
    --form "puid=jiyeoievgtvvq"\
    --form "file_url=https://feil.com/enim-enim-rerum-voluptatum-qui-facilis-omnis-voluptatum.html"\
    --form "name=quia"\
    --form "size=20"\
    --form "type=ipsa"\
    --form "filekey=@/tmp/phpvSYBVd" 
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/upload"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
};

const body = new FormData();
body.append('comments', 'rem');
body.append('default[comments]', '');
body.append('default[task]', '1');
body.append('default[reviewers]', '');
body.append('schedule', 'tenetur');
body.append('task[category]', 'ad');
body.append('task[due_at]', 'alias');
body.append('task[req_confirm]', '1');
body.append('task[status]', 'et');
body.append('reason', 'send-message');
body.append('recipient', 'qui');
body.append('reviewers[]', 'at');
body.append('parent', 'mollitia');
body.append('puid', 'jiyeoievgtvvq');
body.append('file_url', 'https://feil.com/enim-enim-rerum-voluptatum-qui-facilis-omnis-voluptatum.html');
body.append('name', 'quia');
body.append('size', '20');
body.append('type', 'ipsa');
body.append('filekey', document.querySelector('input[name="filekey"]').files[0]);

fetch(url, {
    method: "POST",
    headers,
    body,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/upload';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'multipart/form-data',
            'Accept' => 'application/json',
        ],
        'multipart' => [
            [
                'name' => 'comments',
                'contents' => 'rem'
            ],
            [
                'name' => 'default[comments]',
                'contents' => ''
            ],
            [
                'name' => 'default[task]',
                'contents' => '1'
            ],
            [
                'name' => 'default[reviewers]',
                'contents' => ''
            ],
            [
                'name' => 'schedule',
                'contents' => 'tenetur'
            ],
            [
                'name' => 'task[category]',
                'contents' => 'ad'
            ],
            [
                'name' => 'task[due_at]',
                'contents' => 'alias'
            ],
            [
                'name' => 'task[req_confirm]',
                'contents' => '1'
            ],
            [
                'name' => 'task[status]',
                'contents' => 'et'
            ],
            [
                'name' => 'reason',
                'contents' => 'send-message'
            ],
            [
                'name' => 'recipient',
                'contents' => 'qui'
            ],
            [
                'name' => 'reviewers[]',
                'contents' => 'at'
            ],
            [
                'name' => 'parent',
                'contents' => 'mollitia'
            ],
            [
                'name' => 'puid',
                'contents' => 'jiyeoievgtvvq'
            ],
            [
                'name' => 'file_url',
                'contents' => 'https://feil.com/enim-enim-rerum-voluptatum-qui-facilis-omnis-voluptatum.html'
            ],
            [
                'name' => 'name',
                'contents' => 'quia'
            ],
            [
                'name' => 'size',
                'contents' => '20'
            ],
            [
                'name' => 'type',
                'contents' => 'ipsa'
            ],
            [
                'name' => 'filekey',
                'contents' => fopen('/tmp/phpvSYBVd', 'r')
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "ac": {
        "can_assign": true,
        "can_delete": true,
        "can_download": false,
        "can_edit": true,
        "can_view": true,
        "control_job": true,
        "delete_options": {
            "action": "trash"
        }
    },
    "asg_email": "tom.jerry@tj.com",
    "asg_name": "Tom",
    "c_email": "my.customer@domain.com",
    "c_name": "My Customer",
    "created_at": "2021-02-06T10:21:06.000Z",
    "cus_download": true,
    "deleted_at": null,
    "due_at": null,
    "guid": "b7926eb4-6726-4917-abfd-e6eed3476e56",
    "has_comment": false,
    "is_folder": false,
    "is_own": true,
    "is_portal": false,
    "is_watching": false,
    "locked": false,
    "more_info": {
        "annotations": {
            "annot_cnt": 0,
            "annot_cnt_plus": false
        },
        "pageCount": 1,
        "pages": [
            {
                "bits": 0,
                "color": "UNKNOWN",
                "height": 922,
                "mime": "image/png",
                "width": 1616
            }
        ]
    },
    "name": "A Test File.png",
    "newly_assigned": false,
    "parent_guid": "f1096786-687e-4e40-87c7-bdb90ef631e7",
    "p_email": "forward.partner@domain.com",
    "path_url": "http://www.good2gosoftware.com/review/file/b7926eb4-6726-4917-abfd-e6eed3476e56/document/A%20Test%20File.png?version=1",
    "p_name": "DEF Printer",
    "size": 582817,
    "source": "in-app",
    "status": "new",
    "type": "image/png",
    "updated_at": "2021-02-06T10:21:06.000Z",
    "version": 1
}
 

Request   

POST api/v1/upload

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: multipart/form-data

Accept      

Example: application/json

Body Parameters

comments   string  optional  

Comment, if any, associated sending notification. This field is relevant when upload is associated with a task. Example: rem

default   object  optional  

The default value to be used for task related fields. If defined, it auto fill those properties.

comments   boolean  optional  

Whether to use default comments, if comments field is not defined. Example: false

task   boolean  optional  

Whether to use default value for task sub-properties, if they are not defined. Example: true

reviewers   boolean  optional  

Whether to use existing reviewer, if reviewers field is not defined. Example: false

schedule   string  optional  

When to schedule the task. The valid values are [now, later]. Example: tenetur

task   object  optional  

The task associated with this job. (Click to see more options.)

category   string  optional  

The task category. The supported values are [assign-task, forward-task, review-task, revision-task, and upload-task]. Example: ad

due_at   string  optional  

Due date of the task to complete. Default value is 'null'. Example: alias

req_confirm   boolean  optional  

Whether required confirmation is enabled or not. Example: true

status   string  optional  

The status of the job. Valid values are [new, paused, processing, and done]. Example: et

reason   string   

Example: send-message

Must be one of:
  • notify-task
  • reset-task
  • send-message
  • send-message-all
  • update-task
recipient   email  optional  

Email ID of the customer associated with the job. Example: qui

reviewers   string[]  optional  

List of reviewers of this task.

email   string  optional  

Must be a valid email address. Example: walsh.collin@example.org

group   string  optional  

Example: doloribus

parent   string  optional  

Parent folder GUID. If not provided then the file is added to the root folder. Example: mollitia

puid   string  optional  

Must not be greater than 80 characters. Example: jiyeoievgtvvq

file_url   string   

A public downloadable URL which can be used to download the file. Maximum length is 2000 characters. Must be present when filekey is absent. Example: https://feil.com/enim-enim-rerum-voluptatum-qui-facilis-omnis-voluptatum.html

filekey   file   

The attached document. The file key to be used in multipart form data shall be filekey. Example: /tmp/phpvSYBVd

name   string  optional  

The name of the file. If not provided then file name is extracted from name parameter of HTTP file upload. This is required when file URL is provided. Example: quia

size   integer  optional  

The size of the file in bytes. This field is required and shall be valid size when file_url is provided. It is ignored in the case of direct file upload. Example: 20

type   string  optional  

The file mime type. This field is required and shall be valid mime type when file_url is provided. It is ignored in the case of direct file upload. Example: ipsa

Response

Response Fields

ac   object   

Hint about access control, if any, on this returned data.

c_email   string   

Customer email address.

guid   string   

required The unique GUID of the job.

parent_guid   string   

The GUID of the parent folder, if any.

Upload a file revision

requires authentication

Example request:
curl --request POST \
    "https://www.review.good2gosoftware.com/api/v1/jobs/fugiat/revision" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "comments=reprehenderit"\
    --form "default[comments]=1"\
    --form "default[task]="\
    --form "default[reviewers]=1"\
    --form "schedule=distinctio"\
    --form "task[category]=enim"\
    --form "task[due_at]=officia"\
    --form "task[req_confirm]=1"\
    --form "task[status]=dolorem"\
    --form "reason=notify-task"\
    --form "recipient=quis"\
    --form "reviewers[]=facilis"\
    --form "parent=doloribus"\
    --form "puid=kthjmwogeqhmhvndcptgiz"\
    --form "file_url=http://www.mills.com/"\
    --form "name=voluptatibus"\
    --form "size=3"\
    --form "type=enim"\
    --form "filekey=@/tmp/php5O992H" 
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/fugiat/revision"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
};

const body = new FormData();
body.append('comments', 'reprehenderit');
body.append('default[comments]', '1');
body.append('default[task]', '');
body.append('default[reviewers]', '1');
body.append('schedule', 'distinctio');
body.append('task[category]', 'enim');
body.append('task[due_at]', 'officia');
body.append('task[req_confirm]', '1');
body.append('task[status]', 'dolorem');
body.append('reason', 'notify-task');
body.append('recipient', 'quis');
body.append('reviewers[]', 'facilis');
body.append('parent', 'doloribus');
body.append('puid', 'kthjmwogeqhmhvndcptgiz');
body.append('file_url', 'http://www.mills.com/');
body.append('name', 'voluptatibus');
body.append('size', '3');
body.append('type', 'enim');
body.append('filekey', document.querySelector('input[name="filekey"]').files[0]);

fetch(url, {
    method: "POST",
    headers,
    body,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/fugiat/revision';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'multipart/form-data',
            'Accept' => 'application/json',
        ],
        'multipart' => [
            [
                'name' => 'comments',
                'contents' => 'reprehenderit'
            ],
            [
                'name' => 'default[comments]',
                'contents' => '1'
            ],
            [
                'name' => 'default[task]',
                'contents' => ''
            ],
            [
                'name' => 'default[reviewers]',
                'contents' => '1'
            ],
            [
                'name' => 'schedule',
                'contents' => 'distinctio'
            ],
            [
                'name' => 'task[category]',
                'contents' => 'enim'
            ],
            [
                'name' => 'task[due_at]',
                'contents' => 'officia'
            ],
            [
                'name' => 'task[req_confirm]',
                'contents' => '1'
            ],
            [
                'name' => 'task[status]',
                'contents' => 'dolorem'
            ],
            [
                'name' => 'reason',
                'contents' => 'notify-task'
            ],
            [
                'name' => 'recipient',
                'contents' => 'quis'
            ],
            [
                'name' => 'reviewers[]',
                'contents' => 'facilis'
            ],
            [
                'name' => 'parent',
                'contents' => 'doloribus'
            ],
            [
                'name' => 'puid',
                'contents' => 'kthjmwogeqhmhvndcptgiz'
            ],
            [
                'name' => 'file_url',
                'contents' => 'http://www.mills.com/'
            ],
            [
                'name' => 'name',
                'contents' => 'voluptatibus'
            ],
            [
                'name' => 'size',
                'contents' => '3'
            ],
            [
                'name' => 'type',
                'contents' => 'enim'
            ],
            [
                'name' => 'filekey',
                'contents' => fopen('/tmp/php5O992H', 'r')
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "ac": {
        "can_assign": true,
        "can_delete": true,
        "can_download": false,
        "can_edit": true,
        "can_view": true,
        "control_job": true,
        "delete_options": {
            "action": "trash"
        }
    },
    "asg_email": "tom.jerry@tj.com",
    "asg_name": "Tom",
    "c_email": "my.customer@domain.com",
    "c_name": "My Customer",
    "created_at": "2021-02-06T10:21:06.000Z",
    "cus_download": true,
    "deleted_at": null,
    "due_at": null,
    "guid": "b7926eb4-6726-4917-abfd-e6eed3476e56",
    "has_comment": false,
    "is_folder": false,
    "is_own": true,
    "is_portal": false,
    "is_watching": false,
    "locked": false,
    "more_info": {
        "annotations": {
            "annot_cnt": 0,
            "annot_cnt_plus": false
        },
        "pageCount": 1,
        "pages": [
            {
                "bits": 0,
                "color": "UNKNOWN",
                "height": 922,
                "mime": "image/png",
                "width": 1616
            }
        ]
    },
    "name": "A Test File.png",
    "newly_assigned": false,
    "parent_guid": "f1096786-687e-4e40-87c7-bdb90ef631e7",
    "p_email": "forward.partner@domain.com",
    "path_url": "http://www.good2gosoftware.com/review/file/b7926eb4-6726-4917-abfd-e6eed3476e56/document/A%20Test%20File.png?version=1",
    "p_name": "DEF Printer",
    "size": 582817,
    "source": "in-app",
    "status": "new",
    "type": "image/png",
    "updated_at": "2021-02-06T10:21:06.000Z",
    "version": 1
}
 

Request   

POST api/v1/jobs/{job_guid}/revision

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: multipart/form-data

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. Example: fugiat

Body Parameters

comments   string  optional  

Comment, if any, associated sending notification. This field is relevant when upload is associated with a task. Example: reprehenderit

default   object  optional  

The default value to be used for task related fields. If defined, it auto fill those properties.

comments   boolean  optional  

Whether to use default comments, if comments field is not defined. Example: true

task   boolean  optional  

Whether to use default value for task sub-properties, if they are not defined. Example: false

reviewers   boolean  optional  

Whether to use existing reviewer, if reviewers field is not defined. Example: true

schedule   string  optional  

When to schedule the task. The valid values are [now, later]. Example: distinctio

task   object  optional  

The task associated with this job. (Click to see more options.)

category   string  optional  

The task category. The supported values are [assign-task, forward-task, review-task, revision-task, and upload-task]. Example: enim

due_at   string  optional  

Due date of the task to complete. Default value is 'null'. Example: officia

req_confirm   boolean  optional  

Whether required confirmation is enabled or not. Example: true

status   string  optional  

The status of the job. Valid values are [new, paused, processing, and done]. Example: dolorem

reason   string   

Example: notify-task

Must be one of:
  • notify-task
  • reset-task
  • send-message
  • send-message-all
  • update-task
recipient   email  optional  

Email ID of the customer associated with the job. Example: quis

reviewers   string[]  optional  

List of reviewers of this task.

email   string  optional  

Must be a valid email address. Example: fisher.muriel@example.com

group   string  optional  

Example: sequi

parent   string  optional  

Parent folder GUID. If not provided then the file will retain previous parent folder. Example: doloribus

puid   string  optional  

Must not be greater than 80 characters. Example: kthjmwogeqhmhvndcptgiz

file_url   string   

A public downloadable URL which can be used to download the file. Maximum length is 2000 characters. Must be present when filekey is absent. Example: http://www.mills.com/

filekey   file   

The attached document. The file key to be used in multipart form data shall be filekey. Example: /tmp/php5O992H

name   string  optional  

The name of the file. If not provided then file name is extracted from name parameter of HTTP file upload. This is required when file URL is provided. Example: voluptatibus

size   integer  optional  

The size of the file in bytes. This field is required and shall be valid size when file_url is provided. It is ignored in the case of direct file upload. Example: 3

type   string  optional  

The file mime type. This field is required and shall be valid mime type when file_url is provided. It is ignored in the case of direct file upload. Example: enim

Response

Response Fields

ac   object   

Hint about access control, if any, on this returned data.

c_email   string   

Customer email address.

guid   string   

required The unique GUID of the job.

parent_guid   string   

The GUID of the parent folder, if any.

Miscellaneous endpoints

Apply a job action

requires authentication

Three kind of actions are supported at this moment:

If job is expired, by calling the renew action, it bring the job to previous state.

Example request:
curl --request POST \
    "https://www.review.good2gosoftware.com/api/v1/jobs/omnis/action/repudiandae" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"ignore\": [
        \"dicta\"
    ]
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/omnis/action/repudiandae"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "ignore": [
        "dicta"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/omnis/action/repudiandae';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'ignore' => [
                'dicta',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "asg_email": "tom.jerry@tj.com",
    "asg_name": "Tom",
    "c_email": "my.customer@domain.com",
    "c_name": "My Customer",
    "created_at": "2021-02-06T10:21:06.000Z",
    "deleted_at": null,
    "due_at": null,
    "guid": "b7926eb4-6726-4917-abfd-e6eed3476e56",
    "has_comment": false,
    "is_folder": false,
    "is_own": true,
    "name": "A Test File.png",
    "newly_assigned": false,
    "parent_guid": "f1096786-687e-4e40-87c7-bdb90ef631e7",
    "path_url": "http://www.good2gosoftware.com/review/file/b7926eb4-6726-4917-abfd-e6eed3476e56/document/A%20Test%20File.png?version=1",
    "size": 582817,
    "status": "new",
    "type": "image/png",
    "updated_at": "2021-02-06T10:21:06.000Z",
    "version": 1
}
 

Example response (403):


{
    "error": {
        "message": "User access not permitted.",
        "status_code": 403
    }
}
 

Example response (406):


{
    "error": {
        "message": "Acceptable action ids are [ 'inherit', 'renew', 'send-to-mis' ].",
        "status_code": 406
    }
}
 

Example response (422):


{
    "error": {
        "message": "Parent job is not a folder.",
        "status_code": 422
    }
}
 

Request   

POST api/v1/jobs/{job_guid}/action/{action}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: omnis

action   string   

One of the value [ 'inherit', 'renew', 'send-to-mis' ]. Example: repudiandae

Body Parameters

ignore   string[]  optional  

List of properties that can be ignored when inherit action is applied. The supported properties are [ alt_text, c_email, due_at, p_email, cus_download, show_job_spec, and show_preflight]

  • alt_text: Alternative text
  • c_email: Customer email
  • due_at: Deadline
  • p_email: Partner email
  • cus_download: Customer download
  • show_job_spec: Show job specification
  • show_preflight: Show preflight summary

Assign to team member

requires authentication

Assign a job to a team member. Job can only be assigned to team members who are part same team. Visit account page got more information about team and team members.

Example request:
curl --request POST \
    "https://www.review.good2gosoftware.com/api/v1/jobs/sit/assign" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"comments\": \"voluptatem\",
    \"default\": {
        \"comments\": false,
        \"task\": false
    },
    \"schedule\": \"later\",
    \"task\": {
        \"category\": \"maxime\",
        \"due_at\": \"id\",
        \"req_confirm\": true,
        \"status\": \"voluptatum\"
    },
    \"reason\": \"update-task\",
    \"recipient\": \"jesus79@example.net\",
    \"assignee\": \"atque\"
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/sit/assign"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "comments": "voluptatem",
    "default": {
        "comments": false,
        "task": false
    },
    "schedule": "later",
    "task": {
        "category": "maxime",
        "due_at": "id",
        "req_confirm": true,
        "status": "voluptatum"
    },
    "reason": "update-task",
    "recipient": "jesus79@example.net",
    "assignee": "atque"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/sit/assign';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'comments' => 'voluptatem',
            'default' => [
                'comments' => false,
                'task' => false,
            ],
            'schedule' => 'later',
            'task' => [
                'category' => 'maxime',
                'due_at' => 'id',
                'req_confirm' => true,
                'status' => 'voluptatum',
            ],
            'reason' => 'update-task',
            'recipient' => 'jesus79@example.net',
            'assignee' => 'atque',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "assignee": "tom.jerry@disney.com",
    "comments": "Can you update the bleed?",
    "task": {
        "category": "assign-task",
        "created_at": "2021-08-25T08:30:59.000Z",
        "due_at": null,
        "executed_at": "2021-08-25T10:01:37.460Z",
        "id": 15,
        "status": "new"
    }
}
 

Example response (422):


{
    "error": {
        "message": "User abc.pqr@xyz.com is not a team member.",
        "status_code": 422
    }
}
 

Request   

POST api/v1/jobs/{job_guid}/assign

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: sit

Body Parameters

comments   string  optional  

Comment, if any, associated with assignment. Example: voluptatem

default   object  optional  
comments   boolean  optional  

Example: false

task   boolean  optional  

Example: false

schedule   string   

The notification schedule time. Example: later

Must be one of:
  • now
  • later
task   object   

The task associated with this job

category   string   

The task category. Only supported values is assign-task. Example: maxime

due_at   string  optional  

Due date of the task to complete. Default value is 'null'. Example: id

req_confirm   boolean  optional  

Whether confirmation is required during approval. Example: true

status   string  optional  

The status of the job. Valid values are [new, paused, processing, and done]. Example: voluptatum

reason   string   

Example: update-task

Must be one of:
  • notify-task
  • reset-task
  • send-message
  • send-message-all
  • update-task
recipient   string  optional  

Must be a valid email address. The 'reason' and 'recipient' are translated internal fields. The actual input fields is 'assignee'. Refer to prepareForValidation() method. Example: jesus79@example.net

assignee   string   

Email address of team member. Example: atque

Response

Response Fields

assignee   string   

required Email address of team member.

comments   string   

The comment sent through this notification.

task   object   

required The task associated with this job

category   string   

required The task category. The supported values are [review-task, upload-task, revision-task, and assign-task].

due_at   string   

Due date of the task to complete. Default value is 'null'.

status   string   

The status of the job. Valid values are [new, paused, processing, and done]. Default value is 'new'.

Get job history

requires authentication

It returns array (list) of job history.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/consectetur/changelogs" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/consectetur/changelogs"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/consectetur/changelogs';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


[
    {
        "category": "comments",
        "comments": "Update email send to test.good2go@gmail.com",
        "created_at": "2021-02-08T16:46:56.000Z",
        "from_email": "test.good2go@yahoo.com",
        "id": 702,
        "job_guid": "d92430f7-ba9c-490c-a070-4eeff0da9d54"
    },
    {
        "category": "notification.manual",
        "comments": "Reminder email sent to test.good2go@gmail.com",
        "created_at": "2021-02-08T15:20:44.000Z",
        "from_email": "test.good2go@yahoo.com",
        "id": 699,
        "job_guid": "d92430f7-ba9c-490c-a070-4eeff0da9d54"
    },
    {
        "category": "comments.approval",
        "comments": "(Status: approved) Looks to be okay",
        "created_at": "2020-12-12T06:56:43.000Z",
        "from_email": "test.good2go@yahoo.com",
        "id": 481,
        "job_guid": "d92430f7-ba9c-490c-a070-4eeff0da9d54"
    },
    {
        "category": "comments.assigned",
        "comments": "(Assigned to: team.member@gmail.com) Please add bleed to this job.",
        "created_at": "2020-12-10T18:21:11.000Z",
        "from_email": "test.good2go@yahoo.com",
        "id": 478,
        "job_guid": "d92430f7-ba9c-490c-a070-4eeff0da9d54"
    },
    {
        "category": "imageinfo",
        "comments": "{\"width\":320,\"height\":215,\"mime\":\"image/png\",\"color\":\"UNKNOWN\",\"bits\":0}",
        "created_at": "2020-12-06T05:19:14.000Z",
        "from_email": "test.good2go@yahoo.com",
        "id": 448,
        "job_guid": "d92430f7-ba9c-490c-a070-4eeff0da9d54"
    },
    {
        "category": "comments",
        "comments": "A first version uploaded - 1",
        "created_at": "2020-12-06T05:19:14.000Z",
        "from_email": "test.good2go@yahoo.com",
        "id": 449,
        "job_guid": "d92430f7-ba9c-490c-a070-4eeff0da9d54"
    }
]
 

Request   

GET api/v1/jobs/{job_guid}/changelogs

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: consectetur

Response

Response Fields

category   string   

The record category. This is used for internal purpose and can change in future.

comments   string   

The comments added to the job.

created_at   string   

When this record was made in ISO UTC datetime format.

from_email   string   

The email ID of Goo2Go user or customer who created this record.

Get latest job comments

requires authentication

It returns latest job comment.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/officiis/changelogs/latest" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/officiis/changelogs/latest"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/officiis/changelogs/latest';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "category": "comments.approval",
    "comments": "(Status: approved) Looks to be okay",
    "created_at": "2020-12-12T06:56:43.000Z",
    "from_email": "test.good2go@yahoo.com",
    "id": 481,
    "job_guid": "d92430f7-ba9c-490c-a070-4eeff0da9d54"
}
 

Request   

GET api/v1/jobs/{job_guid}/changelogs/latest

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: officiis

Response

Response Fields

category   string   

The record category. This is used for internal purpose and can change in future.

comments   string   

The comments added to the job.

created_at   string   

When this record was made in ISO UTC datetime format.

from_email   string   

The email ID of Goo2Go user or customer who created this record.

Get lock state of a job

requires authentication

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/modi/locking" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/modi/locking"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/modi/locking';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "guid": "f6ac15ca-e4fa-4e1f-bb94-088ec04d7dab",
    "locked": true
}
 

Example response (404):


{
    "error": {
        "message": "Resource not found",
        "status_code": 404
    }
}
 

Request   

GET api/v1/jobs/{job_guid}/locking

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: modi

Response

Response Fields

locked   boolean   

If this file is locked or not.

Lock or unlock a job

requires authentication

Example request:
curl --request POST \
    "https://www.review.good2gosoftware.com/api/v1/jobs/sed/locking" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"locked\": true
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/sed/locking"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "locked": true
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/sed/locking';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'locked' => true,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "ac": {
        "can_assign": true,
        "can_delete": true,
        "can_download": false,
        "can_edit": true,
        "can_view": true,
        "control_job": true,
        "delete_options": {
            "action": "trash"
        }
    },
    "asg_email": "tom.jerry@tj.com",
    "asg_name": "Tom",
    "c_email": "my.customer@domain.com",
    "c_name": "My Customer",
    "created_at": "2021-02-06T10:21:06.000Z",
    "cus_download": true,
    "deleted_at": null,
    "due_at": null,
    "guid": "b7926eb4-6726-4917-abfd-e6eed3476e56",
    "has_comment": false,
    "is_folder": false,
    "is_own": true,
    "is_portal": false,
    "is_watching": false,
    "locked": false,
    "more_info": {
        "annotations": {
            "annot_cnt": 0,
            "annot_cnt_plus": false
        },
        "pageCount": 1,
        "pages": [
            {
                "bits": 0,
                "color": "UNKNOWN",
                "height": 922,
                "mime": "image/png",
                "width": 1616
            }
        ]
    },
    "name": "A Test File.png",
    "newly_assigned": false,
    "parent_guid": "f1096786-687e-4e40-87c7-bdb90ef631e7",
    "p_email": "forward.partner@domain.com",
    "path_url": "http://www.good2gosoftware.com/review/file/b7926eb4-6726-4917-abfd-e6eed3476e56/document/A%20Test%20File.png?version=1",
    "p_name": "DEF Printer",
    "size": 582817,
    "source": "in-app",
    "status": "new",
    "type": "image/png",
    "updated_at": "2021-02-06T10:21:06.000Z",
    "version": 1
}
 

Example response (404):


{
    "error": {
        "message": "Resource not found",
        "status_code": 404
    }
}
 

Request   

POST api/v1/jobs/{job_guid}/locking

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: sed

Body Parameters

locked   boolean   

Example: true

Get job owner information.

requires authentication

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/veritatis/ownership" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/veritatis/ownership"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/veritatis/ownership';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
     "guid": "f6ac15ca-e4fa-4e1f-bb94-088ec04d7dab",
     "owner": "abc.pqr@mail.com",
     "parent": {
         "c_email": "customer@mail.com"
         "guid": "292fb01f-23ad-4d42-b126-251bd95d2637",
         "name": "Test folder",
         ...
     },
     "parent_guid": "292fb01f-23ad-4d42-b126-251bd95d2637"
}
 

Example response (404):


{
    "error": {
        "message": "Resource not found",
        "status_code": 404
    }
}
 

Request   

GET api/v1/jobs/{job_guid}/ownership

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: veritatis

Response

Response Fields

guid   string   

The GUID of the job.

owner   object   

The information about job owner.

parent   object   

The complete information about parent folder.

parent_guid   string   

The GUID of parent folder.

Update job owner and parent folder.

requires authentication

This API is especially useful for moving a job either from one folder to another or from one user to another, or both.

Example request:
curl --request POST \
    "https://www.review.good2gosoftware.com/api/v1/jobs/est/ownership" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"parent_guid\": \"non\"
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/est/ownership"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "parent_guid": "non"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/est/ownership';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'parent_guid' => 'non',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (503):

Show headers
cache-control: no-cache, private
content-type: application/json
 

{
    "message": "Service Unavailable"
}
 

Request   

POST api/v1/jobs/{job_guid}/ownership

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: est

Body Parameters

parent_guid   string   

The parent folder GUID or null for Desktop folder. Example: non

Get user analytical data

requires authentication

Return consolidated data of user or all jobs or jobs in a given folder.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/analytics/occaecati" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/analytics/occaecati"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/analytics/occaecati';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "approved": 1,
    "created_at": "2021-01-24T17:56:03.000Z",
    "data_size_mb": "6852489",
    "due_cnt": 0,
    "guid": "63c56c5e-3aa6-4768-bbd8-01c0b4e5ccaa",
    "id": 1,
    "live_files": 24,
    "locked_at": "2021-01-25T14:13:10.000Z",
    "name": "Large Files Test",
    "processed": 40,
    "rejected": 2,
    "signed_at": "2021-02-12T07:41:37.000Z",
    "updated_at": "2021-02-08T15:20:44.000Z"
}
 

Example response (422):


{
    "error": {
        "message": "This job is not a folder.",
        "status_code": 422
    }
}
 

Request   

GET api/v1/analytics/{job_guid}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string  optional  

The guid of the folder. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: occaecati

Response

Response Fields

approved   integer   

Number of files approved.

data_size_mb   integer   

Size of memory usage in mega bytes (MB).

due_cnt   integer   

Number of files due today.

guid   string   

The guid of parent folder. Null in case of root folder.

live_files   integer   

Total number of live files at this moment.

locked_at   string   

The last time when user account was locked.

name   string   

The name of the parent folder.

processed   integer   

Number of files processed by user so far.

rejected   integer   

Number of files rejected so far.

signed_at   string   

Last date on which user has successfully login to Good2Go review application (in ISO UTC datetime format).

Download job history as CSV or TEXT

requires authentication

It download complete job history as CSV or JSON or TEXT file.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/review/download/occaecati/changelogs/minus?format=adipisci" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/review/download/occaecati/changelogs/minus"
);

const params = {
    "format": "adipisci",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/review/download/occaecati/changelogs/minus';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'format' => 'adipisci',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (503):

Show headers
cache-control: no-cache, private
content-type: application/json
 

{
    "message": "Service Unavailable"
}
 

Request   

GET review/download/{job_guid}/changelogs/{hash}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: occaecati

hash   string   

Example: minus

Query Parameters

format   string   

The download file format. Valid values are:

  • csv
  • json
  • txt
Example: `adipisci`

Download a document

This method does not need authentication. If you have job GUID and name, then file can be downloaded.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/review/download/ab/document/enim" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/review/download/ab/document/enim"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/review/download/ab/document/enim';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (503):

Show headers
cache-control: no-cache, private
content-type: application/json
 

{
    "message": "Service Unavailable"
}
 

Request   

GET review/download/{job_guid}/document/{name}

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api api/v1/jobs. Example: ab

name   string   

The name of the job. This can be derived from the list of jobs returned from api api/v1/jobs. Example: enim

Job tasks

APIs to send, view, update or delete job related tasks and reminders.

There are several different kind of tasks:

Get default task

requires authentication

Return a sample default task of given kind. This can be used to construct a task. If given task kind already exist for the job then existing task is returned.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/tasks/default?kind=dolorum&job_category=ullam" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/tasks/default"
);

const params = {
    "kind": "dolorum",
    "job_category": "ullam",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/tasks/default';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'kind' => 'dolorum',
            'job_category' => 'ullam',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "assigned_to": "tom.jerry@abc.com",
    "category": "review-reminders",
    "created_at": "2021-01-21T06:21:19.000Z",
    "due_at": "2021-01-28T15:42:36.000Z",
    "executed_at": "2021-01-24T06:37:06.000Z",
    "id": 10,
    "job_status": "approved",
    "req_confirm": true,
    "status": "done",
    "updated_at": "2021-01-25T09:45:10.000Z"
}
 

Request   

GET api/v1/jobs/tasks/default

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

kind   string   

The task category. The supported values are [assign-task, forward-task, quote-review-task, review-task, revision-task and upload-task]. Example: dolorum

job_category   string  optional  

The job category. The supported values are [file, folder, and order]. Default value is file.

Example: `ullam`

Response

Response Fields

assigned_to   string   

The assignee of the task.

category   string   

The task category. The expected values are [assign-task, forward-task, quote-review-task, review-task, revision-task and upload-task].

created_at   string   

Task creation date.

due_at   string   

Due date of the task to complete. Default value is 'null'.

executed_at   string   

Last task execution date. Default value is 'null'.

id   string   

The id of this task. Id is especially useful for updating a given task.

job_status   string   

The job status selected by the assignee.

req_confirm   boolean   

Whether required confirmation is enabled or not.

status   string   

The status of the job. Valid values are [new, paused, processing, and done]. Default value is 'new'.

updated_at   string   

Task update date.

Get task list

requires authentication

Return all tasks associated with the given job.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/ex/tasks?kind=placeat&default=" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/ex/tasks"
);

const params = {
    "kind": "placeat",
    "default": "0",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/ex/tasks';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'kind' => 'placeat',
            'default' => '0',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


[
    {
        "assigned_to": "tom.jerry@abc.com",
        "category": "review-reminders",
        "created_at": "2021-01-21T06:21:19.000Z",
        "due_at": "2021-01-28T15:42:36.000Z",
        "executed_at": "2021-01-24T06:37:06.000Z",
        "id": 10,
        "job_status": "pending",
        "req_confirm": false,
        "status": "paused",
        "updated_at": "2021-01-25T09:45:10.000Z"
    }
]
 

Request   

GET api/v1/jobs/{job_guid}/tasks

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: ex

Query Parameters

kind   string  optional  

The task category. The supported values are [review-task, upload-task, revision-task, and assign-task]. May have multiple entries. Example: placeat

default   boolean  optional  

Get default for task category, if not found. Example: false

Response

Response Fields

assigned_to   string   

The assignee of the task.

category   string   

The task category. The expected values are [assign-task, forward-task, quote-review-task, review-task, revision-task and upload-task].

created_at   string   

Task creation date.

due_at   string   

Due date of the task to complete. Default value is 'null'.

executed_at   string   

Last task execution date. Default value is 'null'.

id   string   

The id of this task. Id is especially useful for updating a given task.

job_status   string   

The job status selected by the assignee.

req_confirm   boolean   

Whether required confirmation is enabled or not.

status   string   

The status of the job. Valid values are [new, paused, processing, and done]. Default value is 'new'.

updated_at   string   

Task last update date.

Get task information

requires authentication

Return the information associated with given task of a job.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/praesentium/tasks/290" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/praesentium/tasks/290"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/praesentium/tasks/290';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "assigned_to": "tom.jerry@abc.com",
    "category": "review-reminders",
    "created_at": "2021-01-21T06:21:19.000Z",
    "due_at": "2021-01-28T15:42:36.000Z",
    "executed_at": "2021-01-24T06:37:06.000Z",
    "id": 10,
    "job_status": "approved",
    "req_confirm": true,
    "status": "done",
    "updated_at": "2021-01-25T09:45:10.000Z"
}
 

Request   

GET api/v1/jobs/{job_guid}/tasks/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: praesentium

id   integer   

The ID of the task. Example: 290

Response

Response Fields

assigned_to   string   

The assignee of the task.

category   string   

The task category. The expected values are [assign-task, forward-task, quote-review-task, review-task, revision-task and upload-task].

created_at   string   

Task creation date.

due_at   string   

Due date of the task to complete. Default value is 'null'.

executed_at   string   

Last task execution date. Default value is 'null'.

id   string   

The id of this task. Id is especially useful for updating a given task.

job_status   string   

The job status selected by the assignee.

req_confirm   boolean   

Whether required confirmation is enabled or not.

status   string   

The status of the job. Valid values are [new, paused, processing, and done]. Default value is 'new'.

updated_at   string   

Task last update date.

Create a new task

requires authentication

Create a new task and also newly created task is executed immediately.

Example request:
curl --request POST \
    "https://www.review.good2gosoftware.com/api/v1/jobs/doloremque/tasks" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"category\": \"ut\",
    \"due_at\": \"id\",
    \"job_status\": \"sapiente\",
    \"req_confirm\": true,
    \"status\": \"et\",
    \"assigned_to\": \"autem\"
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/doloremque/tasks"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "category": "ut",
    "due_at": "id",
    "job_status": "sapiente",
    "req_confirm": true,
    "status": "et",
    "assigned_to": "autem"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/doloremque/tasks';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'category' => 'ut',
            'due_at' => 'id',
            'job_status' => 'sapiente',
            'req_confirm' => true,
            'status' => 'et',
            'assigned_to' => 'autem',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "assigned_to": "tom.jerry@abc.com",
    "category": "review-reminders",
    "created_at": "2021-01-21T06:21:19.000Z",
    "due_at": "2021-01-28T15:42:36.000Z",
    "executed_at": "2021-01-24T06:37:06.000Z",
    "id": 10,
    "job_status": "approved",
    "req_confirm": true,
    "status": "done",
    "updated_at": "2021-01-25T09:45:10.000Z"
}
 

Request   

POST api/v1/jobs/{job_guid}/tasks

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job Example: doloremque

Body Parameters

category   string   

The task category. The supported values are [assign-task, forward-task, quote-review-task, review-task, revision-task and upload-task]. Example: ut

due_at   string  optional  

Deadline of the task to complete. It can be 'null'. Example: id

job_status   string  optional  

The associated job status, if any. Refer to job related APIs for more information. Example: sapiente

req_confirm   boolean  optional  

Whether to enable confirmation checkbox for approval. Example: true

status   string  optional  

The status of the job. If provided, the value shall be new. Example: et

assigned_to   string   

The assignee of the task. Example: autem

Response

Response Fields

assigned_to   string   

The assignee of the task.

category   string   

The task category. The expected values are [assign-task, forward-task, quote-review-task, review-task, revision-task and upload-task].

created_at   string   

Task creation date.

due_at   string   

Due date of the task to complete. Default value is 'null'.

executed_at   string   

Last task execution date. Default value is 'null'.

id   string   

The id of this task. Id is especially useful for updating a given task.

job_status   string   

The job status selected by the assignee.

req_confirm   boolean   

Whether required confirmation is enabled or not.

status   string   

The status of the job. Valid values are [new, paused, processing, and done]. Default value is 'new'.

updated_at   string   

Task last update date.

Update existing task

requires authentication

Update an existing task with new information.

Example request:
curl --request PUT \
    "https://www.review.good2gosoftware.com/api/v1/jobs/amet/tasks/290" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"category\": \"rerum\",
    \"due_at\": \"2024-05-04T05:01:36.000Z\",
    \"job_status\": \"pending\",
    \"req_confirm\": true,
    \"status\": \"closed\"
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/amet/tasks/290"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "category": "rerum",
    "due_at": "2024-05-04T05:01:36.000Z",
    "job_status": "pending",
    "req_confirm": true,
    "status": "closed"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/amet/tasks/290';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'category' => 'rerum',
            'due_at' => '2024-05-04T05:01:36.000Z',
            'job_status' => 'pending',
            'req_confirm' => true,
            'status' => 'closed',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "assigned_to": "tom.jerry@abc.com",
    "category": "review-reminders",
    "created_at": "2021-01-21T06:21:19.000Z",
    "due_at": "2021-01-28T15:42:36.000Z",
    "executed_at": "2021-01-24T06:37:06.000Z",
    "id": 10,
    "job_status": "approved",
    "req_confirm": true,
    "status": "done",
    "updated_at": "2021-01-25T09:45:10.000Z"
}
 

Request   

PUT api/v1/jobs/{job_guid}/tasks/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: amet

id   integer   

The ID of the task. Example: 290

Body Parameters

category   string  optional  

The task category. Read the job task documentation for more information. The value and category must match. Example: rerum

due_at   string  optional  

For auto reminder set the deadline. Must be a valid date in the format Y-m-d\TH:i:s.v\Z. Example: 2024-05-04T05:01:36.000Z

job_status   string  optional  

The associated job status selected by assignee. Must not be one of pending or processing. Example: pending

Must be one of:
  • approved
  • change-requested
  • done
  • expired
  • new
  • pending
  • processing
  • rejected
req_confirm   boolean  optional  

Whether confirmation is required during approval. Example: true

status   string  optional  

The status of the task, if any. Example: closed

Must be one of:
  • closed
  • done
  • paused
  • processing

Response

Response Fields

assigned_to   string   

The assignee of the task.

category   string   

The task category. The expected values are [assign-task, forward-task, quote-review-task, review-task, revision-task and upload-task].

created_at   string   

Task creation date.

due_at   string   

Due date of the task to complete. Default value is 'null'.

executed_at   string   

Last task execution date. Default value is 'null'.

id   string   

The id of this task. Id is especially useful for updating a given task.

job_status   string   

The job status selected by the assignee.

req_confirm   boolean   

Whether required confirmation is enabled or not.

status   string   

The status of the job. Valid values are [new, paused, processing, and done]. Default value is 'new'.

updated_at   string   

Task last update date.

Send notification email

requires authentication

Send an email to assignee of task.

Example request:
curl --request PUT \
    "https://www.review.good2gosoftware.com/api/v1/jobs/adipisci/tasks/290/notify" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"comments\": \"quaerat\",
    \"default\": {
        \"comments\": false,
        \"task\": false
    },
    \"schedule\": \"voluptatibus\",
    \"task\": {
        \"category\": \"revision-task\",
        \"due_at\": \"2024-05-04T05:01:36.000Z\",
        \"req_confirm\": false,
        \"status\": \"new\"
    },
    \"reason\": \"aut\"
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/adipisci/tasks/290/notify"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "comments": "quaerat",
    "default": {
        "comments": false,
        "task": false
    },
    "schedule": "voluptatibus",
    "task": {
        "category": "revision-task",
        "due_at": "2024-05-04T05:01:36.000Z",
        "req_confirm": false,
        "status": "new"
    },
    "reason": "aut"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/adipisci/tasks/290/notify';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'comments' => 'quaerat',
            'default' => [
                'comments' => false,
                'task' => false,
            ],
            'schedule' => 'voluptatibus',
            'task' => [
                'category' => 'revision-task',
                'due_at' => '2024-05-04T05:01:36.000Z',
                'req_confirm' => false,
                'status' => 'new',
            ],
            'reason' => 'aut',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "assigned_to": "tom.jerry@abc.com",
    "category": "review-reminders",
    "created_at": "2021-01-21T06:21:19.000Z",
    "due_at": "2021-01-28T15:42:36.000Z",
    "executed_at": "2021-01-24T06:37:06.000Z",
    "id": 10,
    "job_status": "approved",
    "req_confirm": true,
    "status": "done",
    "updated_at": "2021-01-25T09:45:10.000Z"
}
 

Request   

PUT api/v1/jobs/{job_guid}/tasks/{task_id}/notify

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: adipisci

task_id   integer   

The ID of the task. Example: 290

Body Parameters

comments   string  optional  

Comment, if any, associated with this notification. If not provided, then last comment is used for notification. Example: quaerat

default   object  optional  

The default value to be used for task related fields. If defined, it auto fill those properties.

comments   boolean  optional  

Whether to use default comments, if comments field is not defined. Example: false

task   boolean  optional  

Whether to use default value for task sub-properties, if they are not defined. Example: false

schedule   string   

When to schedule this reminder. The valid values are [now, later]. Example: voluptatibus

task   object  optional  

The task associated with this notification.

category   string  optional  

The task category. Read the job task documentation for more information. This field is required when task is present. Example: revision-task

Must be one of:
  • assign-task
  • forward-task
  • review-task
  • revision-task
due_at   string  optional  

For auto reminder set the due date. Must be a valid date in the format Y-m-d\TH:i:s.v\Z. Example: 2024-05-04T05:01:36.000Z

req_confirm   boolean  optional  

Whether confirmation is required during approval. Example: false

status   string  optional  

The status of the task, if any. Example: new

Must be one of:
  • new
  • paused
  • processing
reason   string  optional  

The notification reason. It shall have one of the following values:

  • notify-task: Send notification for given task (default)
  • reset-task: Reset all tasks and status, and bring to the initial state
  • send-message: Send a simple message for given task
  • update-task: Simply update the task without sending notification Example: aut

Response

Response Fields

assigned_to   string   

The assignee of the task.

category   string   

The task category. The expected values are [assign-task, forward-task, quote-review-task, review-task, revision-task and upload-task].

created_at   string   

Task creation date.

due_at   string   

Due date of the task to complete. Default value is 'null'.

executed_at   string   

Last task execution date. Default value is 'null'.

id   string   

The id of this task. Id is especially useful for updating a given task.

job_status   string   

The job status selected by the assignee.

req_confirm   boolean   

Whether required confirmation is enabled or not.

status   string   

The status of the job. Valid values are [new, paused, processing, and done]. Default value is 'new'.

updated_at   string   

Task last update date.

Delete a job task

requires authentication

Delete given task related to a job.

Example request:
curl --request DELETE \
    "https://www.review.good2gosoftware.com/api/v1/jobs/architecto/tasks/290" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/architecto/tasks/290"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/architecto/tasks/290';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (503):

Show headers
cache-control: no-cache, private
content-type: application/json
 

{
    "message": "Service Unavailable"
}
 

Request   

DELETE api/v1/jobs/{job_guid}/tasks/{task_id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: architecto

task_id   integer   

The ID of the task. Example: 290

Job reminders

APIs to list, view, update or delete job specific reminder set. This set will be used by various tasks to send auto reminders based upon task due date.

Get list of reminders

requires authentication

This method list down reminders specifically assigned to given job.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/0001a3c5-634a-4ac6-ae6d-eec962fe2f18/reminders" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/0001a3c5-634a-4ac6-ae6d-eec962fe2f18/reminders"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/0001a3c5-634a-4ac6-ae6d-eec962fe2f18/reminders';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


[
    {
        "cancelled": true,
        "comparator": "before",
        "created_at": "2021-02-06T17:37:17.000Z",
        "date": "2021-12-01T14:54:22.000Z",
        "id": 1,
        "is_auto": true,
        "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
        "quantity": 2,
        "schedule": "later",
        "unit": "days",
        "updated_at": "2021-02-06T17:37:17.000Z"
    },
    {
        "cancelled": false,
        "comparator": "before",
        "created_at": "2020-08-19T17:11:11.000Z",
        "date": "2021-12-02T14:54:22.000Z",
        "id": 1,
        "is_auto": true,
        "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
        "quantity": 1,
        "schedule": "later",
        "unit": "days",
        "updated_at": "2021-01-07T10:17:33.000Z"
    },
    {
        "cancelled": false,
        "comparator": "none",
        "date": "2020-11-15T14:48:07.000Z",
        "id": -1,
        "is_auto": false,
        "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
        "quantity": 0,
        "schedule": "later",
        "unit": "none"
    },
    {
        "cancelled": false,
        "comparator": "none",
        "date": "2020-11-13T02:43:28.000Z",
        "id": -1,
        "is_auto": false,
        "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
        "quantity": 0,
        "schedule": "later",
        "unit": "none"
    },
    {
        "cancelled": false,
        "comparator": "none",
        "date": "2020-10-17T05:12:30.000Z",
        "id": -1,
        "is_auto": false,
        "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
        "quantity": 0,
        "schedule": "later",
        "unit": "none"
    }
]
 

Request   

GET api/v1/jobs/{job_guid}/reminders

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

Example: 0001a3c5-634a-4ac6-ae6d-eec962fe2f18

Response

Response Fields

cancelled   boolean   

[Optional] If the reminder was cancelled in past. It is only available for job associated reminders.

comparator   string   

The comparator with reference to due date and time. The valid value are [equal, before, after, now].

created_at   string   

Reminder creation date.

id   string   

The id of this reminder.

job_guid   string   

[Optional] The GUID of the job. It is only available for job associated reminders.

quantity   number   

The quantity part of auto reminder (see also unit)

unit   string   

The unit part of auto reminder. The supported values are [none, minutes, hours, days].

updated_at   string   

The last updated date and time.

Get job reminder information

requires authentication

Return the reminder associated with given job.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/et/reminders/23" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/et/reminders/23"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/et/reminders/23';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "cancelled": true,
    "comparator": "before",
    "created_at": "2021-02-06T17:37:17.000Z",
    "id": 123,
    "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
    "quantity": 5,
    "unit": "hours",
    "updated_at": "2021-02-06T17:37:17.000Z"
}
 

Request   

GET api/v1/jobs/{job_guid}/reminders/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: et

id   integer   

The ID of the reminder. Example: 23

Create a new reminder

requires authentication

All the values are with reference to due date defined for the job. Let us say a reminder to be set 5 hours before due date then the parameters will be { 'quantity': 5, 'unit': 'hours', 'comparator': 'before' }

Example request:
curl --request POST \
    "https://www.review.good2gosoftware.com/api/v1/jobs/0001a3c5-634a-4ac6-ae6d-eec962fe2f18/reminders" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"quantity\": 1,
    \"unit\": \"none\",
    \"comparator\": \"now\"
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/0001a3c5-634a-4ac6-ae6d-eec962fe2f18/reminders"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "quantity": 1,
    "unit": "none",
    "comparator": "now"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/0001a3c5-634a-4ac6-ae6d-eec962fe2f18/reminders';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'quantity' => 1,
            'unit' => 'none',
            'comparator' => 'now',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "cancelled": true,
    "comparator": "before",
    "created_at": "2021-02-06T17:37:17.000Z",
    "id": 123,
    "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
    "quantity": 5,
    "unit": "hours",
    "updated_at": "2021-02-06T17:37:17.000Z"
}
 

Request   

POST api/v1/jobs/{job_guid}/reminders

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

Example: 0001a3c5-634a-4ac6-ae6d-eec962fe2f18

Body Parameters

quantity   integer   

The quantity part of auto reminder. Must not be greater than 3600. Must be at least 0. Example: 1

unit   string   

The unit part of auto reminder. Example: none

Must be one of:
  • none
  • minutes
  • hours
  • days
comparator   string   

The comparator with reference to due date and time. Example: now

Must be one of:
  • none
  • equal
  • before
  • after
  • now

Update existing job reminder

requires authentication

Example request:
curl --request PUT \
    "https://www.review.good2gosoftware.com/api/v1/jobs/asperiores/reminders/23" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"quantity\": 10,
    \"unit\": \"none\",
    \"comparator\": \"equal\"
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/asperiores/reminders/23"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "quantity": 10,
    "unit": "none",
    "comparator": "equal"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/asperiores/reminders/23';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'quantity' => 10,
            'unit' => 'none',
            'comparator' => 'equal',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "cancelled": true,
    "comparator": "before",
    "created_at": "2021-02-06T17:37:17.000Z",
    "id": 123,
    "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
    "quantity": 5,
    "unit": "hours",
    "updated_at": "2021-02-06T17:37:17.000Z"
}
 

Request   

PUT api/v1/jobs/{job_guid}/reminders/{id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: asperiores

id   integer   

The ID of the reminder. Example: 23

Body Parameters

quantity   integer   

The quantity part of auto reminder. Must not be greater than 3600. Must be at least 0. Example: 10

unit   string   

The unit part of auto reminder. Example: none

Must be one of:
  • none
  • minutes
  • hours
  • days
comparator   string   

The comparator with reference to due date and time. Example: equal

Must be one of:
  • none
  • equal
  • before
  • after
  • now

Delete a job reminder

requires authentication

Delete a reminder related to a job.

Example request:
curl --request DELETE \
    "https://www.review.good2gosoftware.com/api/v1/jobs/minima/reminders/23" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/minima/reminders/23"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/minima/reminders/23';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (503):

Show headers
cache-control: no-cache, private
content-type: application/json
 

{
    "message": "Service Unavailable"
}
 

Request   

DELETE api/v1/jobs/{job_guid}/reminders/{reminder_id}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The guid of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: minima

reminder_id   integer   

The ID of the reminder. Example: 23

Job notifications

APIs to send job notifications for review and approve document, to upload a new document or to update a file revision or job assignment. There are six different kinds of task:

Get notifications history log

requires authentication

Get list of all notification associated with the given job. This includes both manual notification sent in past, auto reminders associated with the job and cancelled reminders, etc.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/dignissimos/notifications/history?kind=est" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/dignissimos/notifications/history"
);

const params = {
    "kind": "est",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/dignissimos/notifications/history';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'query' => [
            'kind' => 'est',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


[
    {
        "cancelled": true,
        "comparator": "before",
        "created_at": "2021-02-06T17:37:17.000Z",
        "date": "2021-12-01T14:54:22.000Z",
        "id": 1,
        "is_auto": true,
        "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
        "quantity": 2,
        "schedule": "later",
        "unit": "days",
        "updated_at": "2021-02-06T17:37:17.000Z"
    },
    {
        "cancelled": false,
        "comparator": "before",
        "created_at": "2020-08-19T17:11:11.000Z",
        "date": "2021-12-02T14:54:22.000Z",
        "id": 1,
        "is_auto": true,
        "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
        "quantity": 1,
        "schedule": "later",
        "unit": "days",
        "updated_at": "2021-01-07T10:17:33.000Z"
    },
    {
        "cancelled": false,
        "comparator": "none",
        "date": "2020-11-15T14:48:07.000Z",
        "id": -1,
        "is_auto": false,
        "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
        "quantity": 0,
        "schedule": "later",
        "unit": "none"
    },
    {
        "cancelled": false,
        "comparator": "none",
        "date": "2020-11-13T02:43:28.000Z",
        "id": -1,
        "is_auto": false,
        "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
        "quantity": 0,
        "schedule": "later",
        "unit": "none"
    },
    {
        "cancelled": false,
        "comparator": "none",
        "date": "2020-10-17T05:12:30.000Z",
        "id": -1,
        "is_auto": false,
        "job_guid": "1ff38f4e-9c0d-4b1b-a665-3ef5aff896fb",
        "quantity": 0,
        "schedule": "later",
        "unit": "none"
    }
]
 

Request   

GET api/v1/jobs/{job_guid}/notifications/history

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: dignissimos

Query Parameters

kind   string  optional  

The task category. The supported values are [assign-task, forward-task, quote-review-task, review-task, revision-task and upload-task]. Example: est

Response

Response Fields

cancelled   boolean   

If the reminder was cancelled in past.

comparator   string   

The comparator with reference to due date and time. The valid value are [equal, before, after, now].

created_at   string   

Reminder creation date.

date   string   

The date and time of last reminder was sent or will be send in future.

id   string   

The id of this reminder. Its value is undefined for manual reminder.

is_auto   boolean   

If the reminder is part of auto reminder or manual reminder.

job_guid   string   

The GUID of the job.

quantity   number   

The quantity part of auto reminder (see also unit)

schedule   string   

Whether to schedule the reminder now or later. Default value is now.

unit   string   

The unit part of auto reminder. The supported values are [none, minutes, hours, days].

updated_at   string   

The last updated date and time.

Get notification

requires authentication

Get notification associated with the given task for a job.

Example request:
curl --request GET \
    --get "https://www.review.good2gosoftware.com/api/v1/jobs/rerum/notifications/fuga" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/rerum/notifications/fuga"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/rerum/notifications/fuga';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "comments": "Review instructions",
    "recipient": "tom.jerry@xyz,com",
    "reviewer": [
        {
            "email": "reviewer1@design.com"
        },
        {
            "email": "reviewer2@design.com"
        },
        {
            "group": "External Review Group"
        }
    ],
    "task": {
        "category": "review-task",
        "due_at": "2021-01-28T15:42:36.000Z",
        "req_confirm": true,
        "status": "processing"
    }
}
 

Request   

GET api/v1/jobs/{job_guid}/notifications/{kind}

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string   

The GUID of the job. This can be derived from the list of jobs returned from api 'api/v1/jobs'. Example: rerum

kind   string   

The task category. The supported values are [assign-task, forward-task, quote-review-task, review-task, revision-task, and upload-task]. Example: fuga

Response

Response Fields

comments   string   

Past comment, if any, associated with this notification.

recipient   string   

This represent responsible customer or partner assigned to the job. Customer are associated with job review and partner are associated with job forward.

task   object   

The task object associated with given task kind requested in query parameter.

category   string   

The task category. The supported values are [assign-task, forward-task, quote-review-task, review-task, revision-task, and upload-task]. This is same as query parameters passed to call this API.

due_at   string   

Due date of the task to complete. Default value is 'null'.

req_confirm   boolean   

Whether required confirmation is enabled or not.

status   string   

The status of the task. Valid values are [new, paused, processing, and done]. Default value is 'new'.

Create a new manual notification

requires authentication

This method can be used to create task and send manual notification for a given task of the job. If the given task already exists then it updates the existing task with new information. Each reviewer has one to one map with task that is created in the background. A task is created or updated for each reviewers based upon reason value.

Example request:
curl --request POST \
    "https://www.review.good2gosoftware.com/api/v1/jobs/non/notifications" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"comments\": \"quaerat\",
    \"default\": {
        \"comments\": false,
        \"task\": false,
        \"reviewers\": false
    },
    \"schedule\": \"officiis\",
    \"task\": {
        \"category\": \"commodi\",
        \"due_at\": \"qui\",
        \"req_confirm\": false,
        \"status\": \"praesentium\"
    },
    \"reason\": \"eum\",
    \"recipient\": \"ut\",
    \"reviewers\": [
        \"voluptas\"
    ]
}"
const url = new URL(
    "https://www.review.good2gosoftware.com/api/v1/jobs/non/notifications"
);

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "comments": "quaerat",
    "default": {
        "comments": false,
        "task": false,
        "reviewers": false
    },
    "schedule": "officiis",
    "task": {
        "category": "commodi",
        "due_at": "qui",
        "req_confirm": false,
        "status": "praesentium"
    },
    "reason": "eum",
    "recipient": "ut",
    "reviewers": [
        "voluptas"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://www.review.good2gosoftware.com/api/v1/jobs/non/notifications';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
        ],
        'json' => [
            'comments' => 'quaerat',
            'default' => [
                'comments' => false,
                'task' => false,
                'reviewers' => false,
            ],
            'schedule' => 'officiis',
            'task' => [
                'category' => 'commodi',
                'due_at' => 'qui',
                'req_confirm' => false,
                'status' => 'praesentium',
            ],
            'reason' => 'eum',
            'recipient' => 'ut',
            'reviewers' => [
                'voluptas',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{
    "comments": "Review instructions",
    "reason": "notify-task",
    "recipient": "tom.jerry@xyz,com",
    "reviewer": [
        {
            "email": "reviewer1@design.com"
        },
        {
            "email": "reviewer2@design.com"
        },
        {
            "group": "External Review Group"
        }
    ],
    "schedule": "now",
    "task": {
        "category": "review-task",
        "due_at": "2021-01-28T15:42:36.000Z",
        "req_confirm": true,
        "status": "paused"
    }
}
 

Request   

POST api/v1/jobs/{job_guid}/notifications

Headers

Authorization      

Example: Bearer {YOUR_AUTH_KEY}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

job_guid   string  optional  

The GUID of the job Example: non

Body Parameters

comments   string  optional  

Comment, if any, associated with this notification. Example: quaerat

default   object  optional  

Use default for undefined properties, such as comments, task.due_at, etc. It auto fill those properties if not defined.

comments   boolean  optional  

Whether to use default comments, if comments field is not defined. Example: false

task   boolean  optional  

Whether to use default value for task sub-properties, if they are not defined. Example: false

reviewers   boolean  optional  

Whether to use existing reviewer, if reviewers field is not defined. Example: false

schedule   string   

When to schedule this reminder. The valid values are [now, later]. Example: officiis

task   object   

The task associated with this job.

category   string   

The task category. The supported values are [assign-task, forward-task, quote-review-task, review-task, revision-task and upload-task]. Example: commodi

due_at   string  optional  

Due date of the task to complete. Default value is 'null'. Example: qui

req_confirm   boolean  optional  

Whether required confirmation is enabled or not. Example: false

status   string  optional  

The status of the job. Valid values are [new, paused, processing, and done]. Example: praesentium

reason   string  optional  

The notification reason. It shall have one of the following values:

  • notify-task: Send notification for given task (default)
  • reset-task: Reset all tasks and status, and bring to the initial state
  • send-message: Send a simple message for given task
  • update-task: Simply update the task without sending notification Example: eum
recipient   email  optional  

The customer or partner to be updated in the job. Example: ut

reviewers   string[]  optional  

List of reviewers of this task.

email   string  optional  

Must be a valid email address. Example: davonte21@example.org

group   string  optional  

Example: voluptate

Response

Response Fields

comments   string   

The comment sent through this notification.

reason   string   

The notification reason. Refer to body parameters.

recipient   string   

This represent responsible customer or partner assigned to the job. Customer are associated with job review and partner are associated with job forward.

schedule   string   

required When to schedule this reminder. The valid values are [now, later].

task   object   

required The task associated with this job.

category   string   

The task category. The supported values are [assign-task, forward-task, quote-review-task, review-task, revision-task, and upload-task]. This is same as query parameters passed to call this API.

due_at   string   

Due date of the task to complete. Default value is 'null'.

req_confirm   boolean   

Whether required confirmation is enabled or not.

status   string   

The status of the task. Valid values are [new, paused, processing, and done]. Default value is 'new'.