Ensure your API integrations support 64-bit records

Organizations with APIs must review each integration to ensure they support 64-bit data types.

We're preparing to upgrade Aconex database fields to 64-bit, across all Aconex instances. If your organization integrates with Aconex APIs, you'll need to review them and ensure they support 64-bit data types. Any Aconex data being managed or stored as a 32-bit Integer must be updated to a String or Long, depending on your implementation. 

What do I need to do?

Before the change, you'll need to review, test, and update your API integrations, where required, to ensure they support the 64-bit data types. This change impacts both Basic Auth and OAuth API integrations.

  1. Review your API integrations and check if you are using (or storing) any of the fields that are upgraded to 64-bit. You'll find the complete list of impacted APIs and database fields below. 
  2. Test your integration(s) in the EA1 environment (once we've confirmed it has been upgraded to 64-bit) and make sure they work as expected.
  3. Update code and/or configurations to ensure your integration(s) continue to work correctly.

Where do I test my integrations?

You'll soon have the chance to test your changes in the Early Access (EA1) environment. If you don't already have access to the Early Access (EA1) environment, please follow the instructions here, so you're ready to go. You should test on both existing and new data, to ensure you are testing against existing IDs and newly generated IDs.

When can I start testing?

Subscribe to API News to be notified when EA1 is available to start testing (expected in June 2026).

What do I need to test and update?

Many Aconex ID fields are being migrated from 32-bit Integer to 64-bit Long. Existing IDs will remain unchanged. However, any new IDs generated for the relevant entities will be issued in the 64-bit format. Fields that are already represented as String are not affected by this change; only fields currently stored as Integer require updating.

As an example, the UserID for an existing user may be 1234567890 (a 32-bit Integer). After the upgrade to 64-bit, a newly created user might have the UserID of 1234567890123456789. The UserID field is already represented as a String in some of the Aconex APIs response structure. However, if you are storing the UserID in your own database as an Integer, you need to ensure your code and/or database supports and manages the value as a String. 

In another example, the DocumentTypeId is represented as a 32-bit Integer in the Aconex API response structure. This means there is an impact to integrations using this field and you'll need to make changes as follows:

  • If your storage layer does not support 64-bit values, you must update it to handle 64-bit DocumentTypeId.
  • If this field is currently represented as int / Integer in your Java DTOs, it must be updated to long / Long.
  • If this field is passed to a UI application via JSON and deserialized in JavaScript, it must be transmitted as a String. This is because JavaScript may lose precision for numeric values greater than 53 bits.

Below are some things to consider depending on the technology you are using for your integration(s).

Technology used Change details Example errors
Java

If you are representing the fields as an  int / Integer, you'll need to convert them to a Long

Here's a code example:

Integer myUserID= 1123456790;
long UserID = myUserID.longValue();

You may receive a Number Format Exception in your integration if you are still representing the field as an Integer instead of a Long.

java.lang.NumberFormatException: For input string: "271341877549072448" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[?:1.8.0_361] at java.lang.Integer.parseInt(Integer.java:583) ~[?:1.8.0_361] at java.lang.Integer.parseInt(Integer.java:615) ~[?:1.8.0_361] at 
Database

If your application is storing the fields in a database, you need to change the column schema to allow 19 digits. i.e.  NUMBER ( 19 )

You may receive a Numeric Overflow Exception in your integration if you are still handling and/or storing the field as an Integer instead of a Long.

Caused by: java.sql.SQLException: Numeric Overflow at oracle.jdbc.driver.NumberCommonAccessor.throwOverflow(NumberCommonAccessor.java:4161) at oracle.jdbc.driver.NumberCommonAccessor.getInt(NumberCommonAccessor.java:111) at oracle.jdbc.driver.GeneratedStatement.getInt(GeneratedStatement.java:171) at oracle.jdbc.driver.GeneratedScrollableResultSet.getInt(GeneratedScrollableResultSet.java:269) at oracle.jdbc.driver.GeneratedResultSet.getInt(GeneratedResultSet.java:621) at com.zaxxer.hikari.pool.HikariProxyResultSet.getInt(HikariProxyResultSet.java)

Javascript
JSON Serializer

Serializing numbers in JavaScript is limited to 53 bits. If your application is using the fields in a web interface, you need to convert them to a String.

If you are using Jackson serializer in your application, you can add the following annotation above the field: 

@JsonSerialize ( using = ToStringSerializer . class )
 

Which APIs and fields are being upgraded to 64-bit?

Below is a list of APIs and the response or request fields that are being upgraded from 32-bit Integers to 64-bit Longs. 

Note:  For most API endpoints, path parameters that represent identifiers, such as projectId and userId, will use the 64-bit ID format. Consumers of these APIs must ensure that such identifiers are stored as Long or String within their integrations.

Module API URL Change in response? Change in request? Field name(s) and impact
Documents Current Set Definition HTTP GET: /api/projects/{projectid}/currentSet

Yes

No

DocumentTypeId → (INTEGER → LONG)

Documents View Document Schema HTTP GET: /api/projects/{projectid}/register/schema

Yes

No

DocumentTypeId → (INTEGER → LONG)

Documents Temporary File Upload HTTP POST: https://hostname:port/api/projects/{projectid}/temporaryFile

No

Yes

DocumentTypeId → (INTEGER → LONG)
Documents Register Document HTTP POST: /api/projects/{projectid}/register

No

Yes

DocumentTypeId → (INTEGER → LONG)
Documents Supersede Document HTTP POST: /api/projects/{projectid}/register/{documentid}/supersede

No

Yes

DocumentTypeId → (INTEGER → LONG)

Mail Create Mail HTTPS POST: /api/projects/{{projectid}}/mail/

No

Yes

mailTypeId → (INTEGER → LONG)

Mail Reply Mail HTTPS POST: /api/projects/{{projectid}}/mail/{{mailIdwithAttachment}}/reply

No

Yes

mailTypeId → (INTEGER → LONG)
Mail Forward Mail HTTPS POST: /api/projects/{{projectid}}/mail/{{mailIdwithAttachment}}/forward

No

Yes

mailTypeId → (INTEGER → LONG)
Mail Saving to Drafts HTTPS POST: /api/projects/{{projectid}}/mail/{{mail_id}}/forward?is_draft=true

No

Yes

mailTypeId → (INTEGER → LONG)
Mail Register Mail HTTPS POST: /api/projects/{{projectid}}/mail/

No

Yes

mailTypeId → (INTEGER → LONG)
Mail View Mail Search Schema HTTPS GET: /api/projects/{projectid}/mail/schema/search

Yes

No

mailTypeId → (INTEGER → LONG)
Mail View Mail Creation Schema HTTPS GET: /api/projects/{projectid}/mail/schema/creation

Yes

No

mailTypeId → (INTEGER → LONG)
Mail View Mail Reply Schema HTTPS GET: /api/projects/{{projectId}}/mail/{{mailId}}/schema/reply

Yes

No

mailTypeId → (INTEGER → LONG)
Mail View Mail Forward Schema HTTPS GET: /api/projects/{{projectId}}/mail/{{mailId}}/schema/forward

Yes

No

mailTypeId → (INTEGER → LONG)
Directory Get Organization Logo HTTP GET: /api/organization/logo?{parameters}

No

Yes

organization_id → (INTEGER → LONG)

Directory Create New User HTTP POST: /api/organizations/{organizationid}/users

No

Yes

project_id → (INTEGER → LONG)

Workflows Search Workflows Of Project HTTP GET: /api/projects/{project_id}/workflows?{parameters}

No

Yes

project_id → (INTEGER → LONG)

Workflows Search Workflows Initiated By User's Organization HTTP GET: /api/projects/{project_id}/workflows/initiated-by/us?{parameters}

No

Yes

project_id → (INTEGER → LONG)

Workflows Search Workflows Not Initiated By User's Organization HTTP GET: /api/projects/{project_id}/workflows/initiated-by/others?{parameters}

No

Yes

project_id → (INTEGER → LONG)

Workflows Search Workflows Assigned to User's Organization HTTP GET: /api/projects/{project_id}/workflows/assigned-to/us?{parameters}

No

Yes

project_id → (INTEGER → LONG)

Workflows Search Workflows Not Assigned to User's Organization HTTP GET: /api/projects/{project_id}/workflows/assigned-to/others?{parameters}

No

Yes

project_id → (INTEGER → LONG)

Workflows Search Workflows By Status HTTP GET: /api/projects/{project_id}/workflows/{status}?{parameters}

No

Yes

project_id → (INTEGER → LONG)

Workflows Search Workflows By Status And Initiated By User's Organization HTTP GET: /api/projects/{project_id}/workflows/{status}/initiated-by/us?{parameters}

No

Yes

project_id → (INTEGER → LONG)

Workflows Search Workflows By Status And Not Initiated By User's Organization HTTP GET: /api/projects/{project_id}/workflows/{status}/initiated-by/others?{parameters}

No

Yes

project_id → (INTEGER → LONG)

Workflows Search Workflows By Status And Assigned To User's Organization HTTP GET: /api/projects/{project_id}/workflows/{status}/assigned-to/us?{parameters}

No

Yes

project_id → (INTEGER → LONG)

Workflows Search Workflows By Status And Not Assigned To User's Organization HTTP GET: /api/projects/{project_id}/workflows/{status}/assigned-to/others?{parameters}

No

Yes

project_id → (INTEGER → LONG)
Projects Get Project Logo HTTP GET: /api/project/logo?{parameters} 

No

Yes

project_id → (INTEGER → LONG)
User Roles

User Role Search (Organization)

HTTP GET: /api/roles?queryparams

Yes

No

roleId → (INTEGER → LONG)

User Roles

User Role Search (Project)

HTTP GET: /api/roles/projects/{project_id}?queryparams

Yes

No

roleId → (INTEGER → LONG)

User Roles

User Search (User Role – Organization)

HTTP GET: /api/roles/users?queryparams 

Yes

No

roleId → (INTEGER → LONG)

User Roles

User Search (User Role – Project)

HTTP GET: /api/roles/users/projects/{project_id}?queryparams

Yes

No

roleId → (INTEGER → LONG)

User Roles

User Entitlements (Organization)

HTTP GET: /api/roles/user?queryparams

Yes

No

roleId → (INTEGER → LONG)

User Roles

User Entitlements (Project)

HTTP GET: /api/roles/user/projects/{project_id}?queryparams

Yes

No

roleId → (INTEGER → LONG)

User Roles

Update User Role (Organization)

HTTP PATCH: /api/roles

No

Yes

roleId → (INTEGER → LONG)

User Roles

Update User Role (Project)

HTTP PATCH: /api/roles/projects/{project_id}

No

Yes

roleId → (INTEGER → LONG)

User Roles

Update Secured Asset permissions (Organization)

HTTP PUT: /api/roles

No

Yes

roleId → (INTEGER → LONG)

User Roles

Update Secured Asset permissions (Project)

HTTP PUT: /api/roles/projects/{project_id}

No

Yes

roleId → (INTEGER → LONG)

User Roles

Update Users assigned to User Role (Organization)

HTTP PUT: /api/roles/userrole

No

Yes

userId → (INTEGER → LONG)

User Roles

Update Users assigned to User Role (Project)

HTTP PUT: /api/roles/userrole/projects/{project_id}

No

Yes
 

userId → (INTEGER → LONG)

Packages project-fields HTTP GET /projects/{projectId}/project-fields No Yes projectId → (INTEGER → LONG)
Packages package-types HTTP GET /projects/{projectId}/package-types No Yes projectId → (INTEGER → LONG)
Packages package-types HTTP POST /projects/{projectId}/package-types No Yes projectId → (INTEGER → LONG)
Packages package-types HTTP GET /projects/{projectId}/package-types/{packageTypeId} No Yes projectId → (INTEGER → LONG)
Packages project-fields HTTP GET /projects/{projectId}/package-types/{packageTypeId}/project-fields No Yes projectId → (INTEGER → LONG)
Packages project-fields HTTP POST /projects/{projectId}/package-types/{packageTypeId}/project-fields No Yes projectId → (INTEGER → LONG)
Packages packages HTTP GET /projects/{projectId}/packages No Yes

projectId → (INTEGER → LONG)

Changed schema fields

  • Collaborator.userId
  • PackageGet.closingUserId
  • PackagesGet.closingUserId
  • PackagesListContent[].closingUserId
  • PackageAttachment.fileId
  • PackageAttachment.userId
  • PackageAttachment.organizationId
  • PackageMail.mailId
  • PackageUnsharedAttachments.content[].files[]
  • PackageTransmittalHistoryItem.transmittalId
  • PackageDistributionList.content[].userId
  • PackageDistributionList.content[].groupId
  • PackageTransmittal.transmittalId
  • MailIds[] changed from generic number to integer(int64)
Packages packages HTTP POST /projects/{projectId}/packages No Yes

projectId → (INTEGER → LONG)

Changed schema fields

  • Collaborator.userId
  • PackageGet.closingUserId
  • PackagesGet.closingUserId
  • PackagesListContent[].closingUserId
  • PackageAttachment.fileId
  • PackageAttachment.userId
  • PackageAttachment.organizationId
  • PackageMail.mailId
  • PackageUnsharedAttachments.content[].files[]
  • PackageTransmittalHistoryItem.transmittalId
  • PackageDistributionList.content[].userId
  • PackageDistributionList.content[].groupId
  • PackageTransmittal.transmittalId
  • MailIds[] changed from generic number to integer(int64)
Packages list HTTP POST /projects/{projectId}/packages/list No Yes

projectId → (INTEGER → LONG)

Changed schema fields

  • Collaborator.userId
  • PackageGet.closingUserId
  • PackagesGet.closingUserId
  • PackagesListContent[].closingUserId
  • PackageAttachment.fileId
  • PackageAttachment.userId
  • PackageAttachment.organizationId
  • PackageMail.mailId
  • PackageUnsharedAttachments.content[].files[]
  • PackageTransmittalHistoryItem.transmittalId
  • PackageDistributionList.content[].userId
  • PackageDistributionList.content[].groupId
  • PackageTransmittal.transmittalId
  • MailIds[] changed from generic number to integer(int64)
Packages packages HTTP GET /projects/{projectId}/packages/{packageId} No Yes

projectId → (INTEGER → LONG)

Changed schema fields

  • Collaborator.userId
  • PackageGet.closingUserId
  • PackagesGet.closingUserId
  • PackagesListContent[].closingUserId
  • PackageAttachment.fileId
  • PackageAttachment.userId
  • PackageAttachment.organizationId
  • PackageMail.mailId
  • PackageUnsharedAttachments.content[].files[]
  • PackageTransmittalHistoryItem.transmittalId
  • PackageDistributionList.content[].userId
  • PackageDistributionList.content[].groupId
  • PackageTransmittal.transmittalId
  • MailIds[] changed from generic number to integer(int64)
Packages packages HTTP PUT /projects/{projectId}/packages/{packageId} No Yes projectId → (INTEGER → LONG)
Packages collaborators HTTP GET /projects/{projectId}/packages/{packageId}/collaborators No Yes

projectId → (INTEGER → LONG)

userId → (INTEGER → LONG)

Packages collaborators HTTP POST /projects/{projectId}/packages/{packageId}/collaborators No Yes

projectId → (INTEGER → LONG)

userId → (INTEGER → LONG)

Packages collaborators HTTP GET /projects/{projectId}/packages/{packageId}/collaborators/{userId} No Yes

projectId → (INTEGER → LONG)

userId → (INTEGER → LONG)

Packages collaborators HTTP PUT /projects/{projectId}/packages/{packageId}/collaborators/{userId} No Yes

projectId → (INTEGER → LONG)

userId → (INTEGER → LONG)

Packages collaborators HTTP DELETE /projects/{projectId}/packages/{packageId}/collaborators/{userId} No Yes

projectId → (INTEGER → LONG)

userId → (INTEGER → LONG)

Packages transmittal-history HTTP GET /projects/{projectId}/packages/{packageId}/transmittal-history No Yes projectId → (INTEGER → LONG)
Packages versions HTTP GET /projects/{projectId}/packages/{packageId}/versions No Yes projectId → (INTEGER → LONG)
Packages versions HTTP GET /projects/{projectId}/packages/{packageId}/versions/{versionId} No Yes projectId → (INTEGER → LONG)
Packages attachments HTTP GET /projects/{projectId}/packages/{packageId}/attachments No Yes projectId → (INTEGER → LONG)
Packages file HTTP GET /projects/{projectId}/packages/{packageId}/attachments/{fileId}/file No Yes projectId → (INTEGER → LONG)
Packages mails HTTP GET /projects/{projectId}/packages/{packageId}/mails No Yes projectId → (INTEGER → LONG)
Packages addToPackage HTTP POST /projects/{projectId}/packages/{packageId}/mails/addToPackage No Yes projectId → (INTEGER → LONG)
Packages deleteFromPackage HTTP POST /projects/{projectId}/packages/{packageId}/mails/deleteFromPackage No Yes projectId → (INTEGER → LONG)
Packages mails HTTP POST /projects/{projectId}/packages/{packageId}/mails/{mailId} No Yes projectId → (INTEGER → LONG)
Packages mails HTTP DELETE /projects/{projectId}/packages/{packageId}/mails/{mailId} No Yes projectId → (INTEGER → LONG)
Packages package-events HTTP GET /projects/{projectId}/package-events No Yes projectId → (INTEGER → LONG)
Packages shared HTTP POST /projects/{projectId}/packages/{packageId}/attachments/shared No Yes projectId → (INTEGER → LONG)
Packages unshared HTTP GET /projects/{projectId}/packages/attachments/unshared No Yes projectId → (INTEGER → LONG)
Packages versions HTTP GET /projects/{projectId}/documents/{trackingId}/versions/{versionNumber} No Yes

projectId → (INTEGER → LONG)

trackingId → (INTEGER → LONG)

Packages distribution-list HTTP GET /projects/{projectId}/packages/{packageId}/distribution-list No Yes projectId → (INTEGER → LONG)
Packages schedule HTTP GET /projects/{projectId}/packages/{packageId}/versions/{versionId}/schedule No Yes projectId → (INTEGER → LONG)
Packages documents-status HTTP GET /projects/{projectId}/packages/{packageId}/documents-status No Yes projectId → (INTEGER → LONG)
Packages move HTTP POST /projects/{projectId}/packages/{packageId}/move No Yes projectId → (INTEGER → LONG)
Packages related-packages HTTP GET /projects/{projectId}/packages/{packageId}/related-packages No Yes projectId → (INTEGER → LONG)
Packages users HTTP PUT /projects/{projectId}/packages/{packageId}/distribution-list/users/{userId} No Yes

projectId → (INTEGER → LONG)

userId → (INTEGER → LONG)

Packages users HTTP DELETE /projects/{projectId}/packages/{packageId}/distribution-list/users/{userId} No Yes

projectId → (INTEGER → LONG)

userId → (INTEGER → LONG)

Packages groups HTTP PUT /projects/{projectId}/packages/{packageId}/distribution-list/groups/{groupId} No Yes

projectId → (INTEGER → LONG)

groupId → (INTEGER → LONG)

Packages groups HTTP DELETE /projects/{projectId}/packages/{packageId}/distribution-list/groups/{groupId} No Yes

projectId → (INTEGER → LONG)

groupId → (INTEGER → LONG)

Packages transmittal HTTP POST /projects/{projectId}/packages/{packageId}/transmittal No Yes projectId → (INTEGER → LONG)
Packages transmittal HTTP POST /projects/{projectId}/packages/{packageId}/versions/{versionId}/transmittal No Yes projectId → (INTEGER → LONG)
Packages total-size HTTP GET /projects/{projectId}/attachments/total-size No Yes projectId → (INTEGER → LONG)
Field - Observations Get Subcontractors For Org HTTP GET /api/organizations/{org_id}/subcontractors?page_no=1&page_size=20

Yes

No

organization_id → (NUMBER → STRING)

Field - Observations Get Subcontractor By ID HTTP GET /api/organizations/{org_id}/subcontractor/{subcontractor_id}?useExternalId=true/false

Yes

No

organization_id → (NUMBER → STRING)

Field - Observations Get Subcontractors For Project HTTP GET /api/projects/{project_id}/observations/subcontractor

Yes

No

organization_id → (NUMBER → STRING)

Field - Observations Sync Subcontractors HTTP POST /api/organizations/{org_id}/subcontractor?useExternalId=true/false

Yes

 

No

organization_id → (NUMBER → STRING)

Field - Observations Update Subcontractors HTTP PUT /api/organizations/{org_id}/subcontractor?useExternalId=true/false

Yes

No

organization_id → (NUMBER → STRING)

Field - Issues

Get Issues count for groups

HTTP GET /api/projects/{project_id}/areas/{area_id}/issues/count?include_child_areas={include_child_areas}&include_shared={include_shared}&group_by={group_by}

Yes

No

organization_id → (NUMBER → STRING)
issue_type → (NUMBER → STRING)
assigned_to_org_user → (NUMBER → STRING)
assigned_to → (NUMBER → STRING)
captured_by → (NUMBER → STRING)
Field - Inspections Create checklist item attachment HTTP POST /api/projects/{project_id}/areas/{area_id}/checklists/{checklist_id}/items/{item_id}/attachments

Yes

 No

createdBy → (NUMBER → STRING)
organization_id → (NUMBER → STRING)
lastModifiedBy → (NUMBER → STRING)

Field - Daily Reports Get daily report by ID HTTP GET /api/projects/{project_id}/daily-reports/{dailyreport_id}?type={type}

Yes

No

 

respondedById → (NUMBER → STRING)

Field - Daily Reports Get daily report by date and owner ID HTTP GET /api/projects/{project_id}/dailyreportbydate/{dailyreport_date}?report_owner={report_owner_id}

Yes

 No

respondedById → (NUMBER → STRING)

Field - Daily Reports

GET Daily Report

Filter By - ProjectId,OrganizationId,Date range,Status,Search String,Delay Type and report owner Id

HTTP GET /api/projects/{project_id}/daily-reports/filter?organizationId={organizationId}&dailyreport_daterange={dailyreport_daterange}&status=&offset_from_utc=-330&search_string=&delay=&report_owner=

Yes

No

reportOwnerId → (NUMBER → STRING)
Field - Daily Reports Create daily report attachment HTTP POST /api/projects/{project_id}/daily-reports/{dailyReportId}/attachments

Yes

No

organization_id → (NUMBER → STRING)

Field - Test Plans Test plan list HTTP GET /projects/{projectId}/test-plans/ Yes No

projectId → (INTEGER → STRING)

nested type.projectId → (INTEGER → STRING)

Field - Test Plans Test plan search HTTP POST /projects/{projectId}/test-plans/search Yes No

projectId → (INTEGER → STRING)

nested type.projectId → (INTEGER → STRING)

Field - Test Plans Test plan detail HTTP GET /projects/{projectId}/test-plans/{testPlanId} Yes No

projectId → (INTEGER → STRING)

nested type.projectId → (INTEGER → STRING)

Field - Test Plans Create test plan HTTP POST /projects/{projectId}/test-plans No Yes

projectId → (INTEGER → STRING)

nested type.projectId → (INTEGER → STRING)

Field - Test Plans Update test plan HTTP PUT /projects/{projectId}/test-plans/{testPlanId} Yes Yes

response projectId → (INTEGER → STRING)

response nested type.projectId → (INTEGER → STRING)

request nested type.projectId → (INTEGER → STRING)

Field - Test Plans Close test plan HTTP POST /projects/{projectId}/test-plans/{testPlanId}/actions/close Yes No

nested testPlanDetail.projectId  → (INTEGER → STRING)

nested testPlanDetail.type.projectId → (INTEGER → STRING)

Field - Test Plans Start test plan HTTP POST /projects/{projectId}/test-plans/{testPlanId}/actions/start Yes No

nested testPlanDetail.projectId → (INTEGER → STRING)

nested testPlanDetail.type.projectId → (INTEGER → STRING)

Field - Test Plans Publish test plan HTTP POST /projects/{projectId}/test-plans/{testPlanId}/actions/publish Yes No

nested testPlanDetail.projectId → (INTEGER → STRING)

nested testPlanDetail.type.projectId → (INTEGER → STRING)

Field - Test Plans Reopen test plan HTTP POST /projects/{projectId}/test-plans/{testPlanId}/actions/reopen Yes No

nested testPlanDetail.projectId → (INTEGER → STRING)

nested testPlanDetail.type.projectId → (INTEGER → STRING)

Field - Test Plans Mark test plan in progress HTTP POST /projects/{projectId}/test-plans/{testPlanId}/actions/inprogress Yes No

nested testPlanDetail.projectId → (INTEGER → STRING)

nested testPlanDetail.type.projectId → (INTEGER → STRING)

Field - Test Plans Submit test plan HTTP POST /projects/{projectId}/test-plans/{testPlanId}/actions/submit Yes No

nested testPlanDetail.projectId → (INTEGER → STRING)

nested testPlanDetail.type.projectId → (INTEGER → STRING)

Field - Test Plans Withdraw test plan submission HTTP POST /projects/{projectId}/test-plans/{testPlanId}/actions/withdraw Yes No

nested testPlanDetail.projectId → (INTEGER → STRING)

nested testPlanDetail.type.projectId → (INTEGER → STRING)

Field - Test Plans Request test plan resubmit HTTP POST /projects/{projectId}/test-plans/{testPlanId}/actions/request-resubmit Yes No

nested testPlanDetail.projectId → (INTEGER → STRING)

nested testPlanDetail.type.projectId → (INTEGER → STRING)

Field - Test Plans Submit test plan for close HTTP POST /projects/{projectId}/test-plans/{testPlanId}/actions/submit/close Yes No

nested testPlanDetail.projectId → (INTEGER → STRING)

nested testPlanDetail.type.projectId → (INTEGER → STRING)

Field - Test Plans Test plan import HTTP POST /projects/{projectId}/test-plans/{testPlanId}/import Yes No

nested testPlanDetail.projectId → (INTEGER → STRING)

nested testPlanDetail.type.projectId → (INTEGER → STRING)

Field - Test Plans Trusted test plan status HTTP POST /trusted/projects/{projectId}/test-plans/status Yes No

projectId → (INTEGER → STRING)

nested type.projectId → (INTEGER → STRING)

Field - Test Plans Template list HTTP GET /projects/{projectId}/templates Yes No

projectId → (INTEGER → STRING)

nested category.projectId → (INTEGER → STRING)

nested sourceTemplate.projectId → (INTEGER → STRING)

Field - Test Plans Create template HTTP POST /projects/{projectId}/templates Yes Yes

request projectId → (INTEGER → STRING)

request nested category.projectId → (INTEGER → STRING)

response projectId → (INTEGER → STRING)

response nested category.projectId → (INTEGER → STRING)

response nested sourceTemplate.projectId → (INTEGER → STRING)

Field - Test Plans Template detail HTTP GET /projects/{projectId}/templates/{templateId} Yes No

projectId → (INTEGER → STRING)

nested category.projectId → (INTEGER → STRING)

nested sourceTemplate.projectId → (INTEGER → STRING)

Field - Test Plans Template detail by version HTTP GET /projects/{projectId}/templates/{templateId}/versions/{version} Yes No

projectId → (INTEGER → STRING)

nested category.projectId → (INTEGER → STRING)

nested sourceTemplate.projectId → (INTEGER → STRING)

Field - Test Plans Templates to copy HTTP GET /projects/{projectId}/templates/to-copy Yes No

projectId → (INTEGER → STRING)

nested category.projectId → (INTEGER → STRING)

nested sourceTemplate.projectId → (INTEGER → STRING)

Field - Test Plans Update template HTTP PUT /projects/{projectId}/templates/{templateId}/update Yes Yes

request nested testPlanTemplateDto.projectId → (INTEGER → STRING)

request nested testPlanTemplateDto.category.projectId → (INTEGER → STRING)

request publishReviewerOrgId → (INTEGER → STRING)

response projectId → (INTEGER → STRING)

response nested category.projectId → (INTEGER → STRING)

response nested sourceTemplate.projectId → (INTEGER → STRING)

Field - Test Plans Template activities list HTTP GET /projects/{projectId}/templates/{templateId}/activities Yes No nested reviews[].reviewerAction.projectId → (INTEGER → STRING)
Field - Test Plans Template activities list by version HTTP GET /projects/{projectId}/templates/{templateId}/versions/{version}/activities Yes No nested reviews[].reviewerAction.projectId → (INTEGER → STRING)
Field - Test Plans Template activity detail HTTP GET /projects/{projectId}/templates/{templateId}/activity/{activityId} Yes No nested reviews[].reviewerAction.projectId → (INTEGER → STRING)
Field - Test Plans Create template activity HTTP POST /projects/{projectId}/templates/{templateId}/activity Yes Yes

request nested reviews[].reviewerAction.projectId → (INTEGER → STRING)

response projectId → (INTEGER → STRING)

response nested category.projectId → (INTEGER → STRING)

response nested reviews[].reviewerAction.projectId → (INTEGER → STRING)

Field - Test Plans Update template activity HTTP PUT /projects/{projectId}/templates/{templateId}/activity/{activityId} Yes Yes

request nested reviews[].reviewerAction.projectId → (INTEGER → STRING)

response projectId → (INTEGER → STRING)

response nested category.projectId → (INTEGER → STRING)

response nested reviews[].reviewerAction.projectId → (INTEGER → STRING)

Field - Test Plans Share template HTTP POST /projects/{projectId}/templates/{templateId}/share Yes Yes

request organizationIds → (INTEGER → STRING)

response projectId → (INTEGER → STRING)

response nested category.projectId → (INTEGER → STRING)

nested sourceTemplate.projectId → (INTEGER → STRING)

Field - Test Plans Bulk share templates HTTP POST /projects/{projectId}/templates/bulk-share Yes Yes

request nested organizationIds → (INTEGER → STRING)

response projectId → (INTEGER → STRING)

response nested category.projectId → (INTEGER → STRING)

response nested sourceTemplate.projectId → (INTEGER → STRING)

Field - Test Plans Copy templates HTTP POST /projects/{projectId}/templates/copy No Yes sourceProjectId → (INTEGER → STRING)
Field - Test Plans Create template with activities HTTP POST /projects/{projectId}/templates/with-activities Yes Yes

request projectId → (INTEGER → STRING)

request nested category.projectId → (INTEGER → STRING)

request nested reviews[].reviewerAction.projectId → (INTEGER → STRING)

response projectId → (INTEGER → STRING)

response nested category.projectId → (INTEGER → STRING)

response nested sourceTemplate.projectId → (INTEGER → STRING)

Field - Test Plans Template import HTTP POST /projects/{projectId}/templates/{templateId}/import Yes No

nested templateDetail.projectId → (INTEGER → STRING)

nested templateDetail.category.projectId → (INTEGER → STRING)

nested templateDetail.sourceTemplate.projectId → (INTEGER → STRING)

Field - Test Plans Add test plan type HTTP POST /projects/{projectId}/settings/testplantype/ Yes Yes projectId → (INTEGER → STRING)
Field - Test Plans Get test plan types HTTP GET /projects/{projectId}/settings/testplantype/ Yes No projectId → (INTEGER → STRING)
Field - Test Plans Edit test plan type HTTP PUT /projects/{projectId}/settings/testplantype/{testPlanTypeId}/ Yes Yes projectId → (INTEGER → STRING)
Field - Test Plans Hide test plan type HTTP PUT /projects/{projectId}/settings/testplantype/{testPlanTypeId}/hide Yes No projectId → (INTEGER → STRING)
Field - Test Plans Show test plan type HTTP PUT /projects/{projectId}/settings/testplantype/{testPlanTypeId}/show Yes No projectId → (INTEGER → STRING)
Field - Test Plans Add reviewer action HTTP POST /projects/{projectId}/settings/revieweraction/ Yes Yes projectId → (INTEGER → STRING)
Field - Test Plans Get reviewer actions HTTP GET /projects/{projectId}/settings/revieweraction/ Yes No projectId → (INTEGER → STRING)
Field - Test Plans Edit reviewer action HTTP PUT /projects/{projectId}/settings/revieweraction/{reviewerActionId}/ Yes Yes projectId → (INTEGER → STRING)
Field - Test Plans Hide reviewer action HTTP PUT /projects/{projectId}/settings/revieweraction/{reviewerActionId}/hide Yes No projectId → (INTEGER → STRING)
Field - Test Plans Show reviewer action HTTP PUT /projects/{projectId}/settings/revieweraction/{reviewerActionId}/show Yes No projectId → (INTEGER → STRING)
Field - Test Plans Get eligible template approval orgs HTTP GET /projects/{projectId}/settings/templateapprovaleligibleorgs/ Yes No

id → (INTEGER → STRING)

projectId → (INTEGER → STRING)

Field - Test Plans Get template approval orgs HTTP GET /projects/{projectId}/settings/templateapprovalorgs/ Yes No

id → (INTEGER → STRING)

projectId → (INTEGER → STRING)

Field - Test Plans Update template approval orgs HTTP POST /projects/{projectId}/settings/templateapprovalorgs/ Yes Yes

request org ids → (INTEGER → STRING)

response id → (INTEGER → STRING)

response projectId → (INTEGER → STRING)

Field - Test Plans Add activity attachment HTTP POST /projects/{projectId}/test-plans/{testPlanId}/activity/{activityId}/attachments/{attachmentId} Yes No projectId → (INTEGER → STRING)
Field - Test Plans Get activity attachments HTTP GET /projects/{projectId}/test-plans/{testPlanId}/activity/{activityId}/attachments/ Yes No projectId → (INTEGER → STRING)
Field - Test Plans Get activity attachment detail HTTP GET /projects/{projectId}/test-plans/{testPlanId}/activity/{activityId}/attachments/{attachmentId} Yes No projectId → (INTEGER → STRING)
Field - Test Plans Activity detail HTTP GET /projects/{projectId}/test-plans/{testPlanId}/activity/{activityId} Yes No nested reviews[].reviewerAction.projectId → (INTEGER → STRING)
Field - Test Plans Update activity HTTP PUT /projects/{projectId}/test-plans/{testPlanId}/activity/{activityId} Yes Yes

request nested reviews[].reviewerAction.projectId → (INTEGER → STRING)

response nested reviews[].reviewerAction.projectId → (INTEGER → STRING)

Field - Test Plans Start activity HTTP POST /projects/{projectId}/test-plans/{testPlanId}/activity/{activityId}/actions/start Yes No nested reviews[].reviewerAction.projectId → (INTEGER → STRING)
Field - Test Plans Complete activity HTTP POST /projects/{projectId}/test-plans/{testPlanId}/activity/{activityId}/actions/complete Yes No nested reviews[].reviewerAction.projectId → (INTEGER → STRING)
Field - Test Plans Reopen activity HTTP POST /projects/{projectId}/test-plans/{testPlanId}/activity/{activityId}/actions/reopen Yes No nested reviews[].reviewerAction.projectId → (INTEGER → STRING)
Field - Test Plans Submit activity for review HTTP POST /projects/{projectId}/test-plans/{testPlanId}/activity/{activityId}/actions/review Yes No nested reviews[].reviewerAction.projectId → (INTEGER → STRING)
Field - Test Plans Mark activity in progress HTTP POST /projects/{projectId}/test-plans/{testPlanId}/activity/{activityId}/actions/inprogress Yes No nested reviews[].reviewerAction.projectId → (INTEGER → STRING)
Field - Test Plans Activity reviews list HTTP GET /projects/{projectId}/test-plans/{testPlanId}/activity/{activityId}/reviews Yes No nested reviewerAction.projectId → (INTEGER → STRING)

What else do I need to know?

Towards the beginning of 2027 we're also planning to retire all Integration IDs. This means that Basic Auth will no longer be accepted for API access. We strongly encourage you to migrate to OAuth to avoid additional effort later.

If you're not already subscribed to receive updates, we encourage you to subscribe to API News for important information regarding Basic Auth retirement.

Where can I get more information?

If you need assistance or need to discuss this change, please contact the Support team.

What's next?

We'll soon update the EA1 Aconex instance to 64-bit so it's ready for you to start testing. Subscribe to API News to be notified when it's ready (expected in June 2026).