Partners
partners api automation
Generates CloudFormation template for AWS integration. Creates the necessary IAM role and policy template for setting up AWS access.
OK
Bad request
Unauthorized
Forbidden
Not found
Method not allowed
Conflict
Internal server error
Default error response
GET /v2/org/{org_id}/partners/onboarding/aws/cloudformation_template HTTP/1.1
Accept: */*
{
"template": {
"ANY_ADDITIONAL_PROPERTY": "anything"
}
}Generates AWS CloudFormation launch stack URL. Creates a pre-configured URL to deploy the CloudFormation stack in the AWS console.
falseOK
Bad request
Unauthorized
Forbidden
Not found
Method not allowed
Conflict
Unprocessable Content
Internal server error
Default error response
GET /v2/org/{org_id}/partners/onboarding/aws/launch-stack-url HTTP/1.1
Accept: */*
{
"url": "text"
}Runs AWS onboarding verification process. Creates a new CUR or uses an existing CUR and verifies AWS integration setup and returns validation status for all required features.
[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\ZfalseOK
The customer's AWS setup needs to change. message and code are both safe to show them. Codes:
cloud_account_already_connected— this AWS account is already onboarded, in this org or anotherno_management_account— the account supplied is a subaccount, not a management accountcannot_assume_role/invalid_credentials— the IAM role could not be assumed; usually created in the wrong accountno_role_policy— the role's attached policy could not be read
Unauthorized
Forbidden
Not found
Method not allowed
Conflict
Unprocessable Content
An unexpected failure on Archera's side. message is generic and no code is returned; retry, then contact Archera support.
Default error response
POST /v2/org/{org_id}/partners/onboarding/aws/verify HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 148
{
"onboarding_id": "text",
"account_id": "text",
"read_only": false,
"existing_cur": {
"region": "text",
"bucket": "text",
"prefix": "text",
"report_name": "text"
}
}[
{
"feature": "text",
"status": "available",
"detail": []
}
]Generates Azure authentication URL for onboarding. Creates or updates Azure onboarding record with tenant and subscription details, then returns the auth URL.
Onboard without purchase permissions. The integration can read cost data and existing commitments, but cannot buy or exchange them.
falseOK
What the customer's Azure account must be able to do before consenting. Safe to show them: onboarding fails at /verify if these are not in place.
Bad request
Unauthorized
Forbidden
Not found
Method not allowed
Conflict
Unprocessable Content
Internal server error
Default error response
GET /v2/org/{org_id}/partners/onboarding/azure/auth-url?azure_tenant_id=text&azure_subscription_id=text HTTP/1.1
Accept: */*
{
"url": "text",
"prerequisites": "text",
"prerequisites_url": "text"
}Runs Azure onboarding verification process. Executes the complete onboarding workflow and returns validation results for all features.
Send false to upgrade an existing read-only integration to write. Omit to leave the permission level alone. Downgrading is not supported: the roles are held per Azure tenant, not per integration.
OK
The customer's Azure setup needs to change. message and code are both safe to show them; several name the exact permission to grant and link our prerequisites checklist. Codes:
tenant_already_connected— another integration in this org already uses this Azure tenantazure_account_kind_mismatch— the requested account kind is not the one this customer's onboarding type exposesazure_account_ids_not_found— one or more requested account ids are not visible in the customer's tenantazure_account_ids_empty— an empty id list was sent; omit the field to onboard every discovered accountazure_tenant_not_found— the tenant id does not resolve in AzureCUSTOM_ROLE_PERMISSION_DENIED— custom role definitions are not enabled in Entra IDTENANT_ROLE_ASSIGNMENT_FAILED— the authorizing account lacks User Access Administrator at the root management groupazure_resource_group_permission_denied— the authorizing account lacks the Contributor role on the subscription, so the resource group cannot be createdazure_resource_provider_permission_denied— the authorizing account cannot register a required resource provider; complete the prerequisites and re-authorizeAADSTS7000215/AADSTS7000222— the Archera app's client secret is invalid or expired
Unauthorized
Forbidden
Not found
Method not allowed
Conflict
Unprocessable Content
An unexpected failure on Archera's side. message is generic and no code is returned; retry, then contact Archera support.
Default error response
POST /v2/org/{org_id}/partners/onboarding/azure/verify HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 86
{
"azure_account_kind": "billing_account",
"azure_account_ids": [
"text"
],
"read_only": true
}[
{
"feature": "text",
"status": "available",
"detail": []
}
]Returns the az commands a customer runs to grant Archera access without a tenant-wide consent prompt. Use this instead of /auth-url when the customer will not authorize the Archera enterprise app. Call /verify once they have run it.
Render the script without purchase permissions. The integration can read cost data and existing commitments, but cannot buy or exchange them.
^[\w().-]+(?<!\.)$^[a-z0-9]{3,24}$^[a-z0-9](?!.*--)[a-z0-9-]{1,61}[a-z0-9]$OK
Bad request
Unauthorized
Forbidden
Not found
Method not allowed
Conflict
Unprocessable Content
Internal server error
Default error response
GET /v2/org/{org_id}/partners/onboarding/azure/cli-script?azure_tenant_id=text&azure_subscription_id=text&read_only=true HTTP/1.1
Accept: */*
{
"script": "text"
}Legacy - use POST /partners/<uuid_str:partner_org_id>/orgs instead. This endpoint will be discontinued soon.
Registers a new child organization under the channel partner. Creates the organization, sets up user memberships, and establishes the partnership relationship.
Name of the child organization. At most 255 characters, and unique across all Archera organizations; a name already in use returns 409. The stored name gains a ' c/o ' suffix, which also counts towards the 255-character limit.
nullOK
Bad request
Unauthorized
Forbidden
Not found
Method not allowed
Conflict
Unprocessable Content
Internal server error
Default error response
POST /v2/org/{org_id}/partners/onboarding/register_child HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 62
{
"company": "text",
"labra_subscription_id": "text",
"email": null
}{
"org_id": "text"
}Starts the onboarding process for an organization. Creates or retrieves an onboarding record and sets the provider to AWS.
OK
Bad request
Unauthorized
Forbidden
Not found
Method not allowed
Conflict
Internal server error
Default error response
POST /v2/org/{org_id}/partners/onboarding/start HTTP/1.1
Accept: */*
{
"onboarding_id": "text"
}Lists child organizations. This returns all orgs belongs to the channel partner identified by org_id.
OK
Bad request
Unauthorized
Forbidden
Not found
Method not allowed
Conflict
Internal server error
Default error response
GET /v2/org/{org_id}/partners/onboarding/child-orgs HTTP/1.1
Accept: */*
[
{
"created_at": "2026-01-01T00:00:00.000Z",
"org_id": "text",
"org_name": "text",
"org_checklist": [
{
"feature": "text",
"status": "available",
"detail": []
}
],
"integration_checklist": {
"ANY_ADDITIONAL_PROPERTY": [
{
"feature": "text",
"status": "available",
"detail": []
}
]
}
}
]Checks whether a cloud account is already connected to any Archera organization. Call it before creating a customer org to catch accounts that need a re-home.
AWS account ID, Azure tenant ID, or GCP billing account ID.
OK
Bad request
Unauthorized
Forbidden
Not found
Method not allowed
Conflict
Unprocessable Content
Internal server error
Default error response
GET /v2/org/{org_id}/partners/onboarding/account-connection?provider=aws&account_id=text HTTP/1.1
Accept: */*
{
"provider": "aws",
"account_id": "text",
"connected": true
}Gets recommended purchase plans for a specific provider. Returns the most suitable plan based on the organization and provider requirements.
OK
How the plan was submitted. automation means a policy applied it rather than a person, which is what lets a client hide routine automated churn.
When the plan was submitted for purchase. Null while it is a draft. Archera executes submitted plans within 5 business days, so this is the clock a 'where is my purchase' question is measured against.
When the plan was cancelled; null while it is alive.
Why the plan was cancelled: checks_failed, customer_cancelled, duplicate_plan, no_purchasable_orders, partner_cancelled, staff_cancelled or stale_automation. Null while it is alive.
Why a cancelled plan closed, in customer terms. Null while the plan is alive. Derived from every check, including the staff-only ones, so the explanation survives without naming a check the caller cannot see.
True when the plan is alive but a customer-visible failed check stops it from purchasing until someone acts; see checks. Internal checks do not set this badge. False for cancelled and completed plans.
Cost estimate this plan was generated from (data_source = 'cost_estimate'); SET NULL survives estimate deletion.
Bad request
Unauthorized
Forbidden
Not found
Method not allowed
Conflict
Unprocessable Content
Internal server error
Default error response
GET /v2/org/{org_id}/partners/purchase-plans-v2/recommended?provider=aws HTTP/1.1
Accept: */*
{
"executed_via": "user",
"submitted_at": null,
"cancelled_at": null,
"cancellation_reason": "checks_failed",
"cancellation_message": null,
"blocked": true,
"start_date": null,
"end_date": null,
"id": "123e4567-e89b-12d3-a456-426614174000",
"data_source": "text",
"name": "text",
"description": null,
"segment_id": "text",
"meta_plan_id": null,
"org_id": "text",
"last_modified": null,
"plan_type": "purchase",
"coverage_id": null,
"created_at": "2026-01-01T00:00:00.000Z",
"is_calculating": true,
"is_saved": true,
"is_locked": true,
"max_upfront_cost": 1,
"minimum_upfront_interest_rate": 1,
"preferred_payment_option": "No Upfront",
"included_contract_specs": [
{
"commitment_type": "text",
"properties": {
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"term": "one_year_gris",
"payment_option": "no_upfront"
}
],
"included_contract_terms": [
"one_year_gris"
],
"recommend_within_covered_accounts": null,
"status": "new",
"is_recommended": true,
"is_default": true,
"is_renewal": true,
"is_cost_estimate_plan": true,
"source_cost_estimate_id": null,
"source_cost_estimate": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"name": "text",
"updated_at": "2026-01-01T00:00:00.000Z",
"deleted_at": null
},
"execution_policy": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"org_id": "123e4567-e89b-12d3-a456-426614174000",
"name": "text",
"description": null,
"created_at": "2026-01-01T00:00:00.000Z",
"last_modified": null,
"schedule": "quarterly",
"start_date": null,
"end_date": null,
"enabled": true,
"next_execution_date": null,
"meta_plan_id": null,
"segment_id": null,
"default_plan_name": null,
"min_savings": null,
"meta_plan": {
"id": "text",
"name": "text",
"created_at": "2026-01-01T00:00:00.000Z",
"is_default": true
},
"created_by": {
"id": "text",
"username": "text",
"full_name": null
},
"plans": [
{
"id": "text",
"name": "text",
"created_at": "2026-01-01T00:00:00.000Z",
"executed_via": "user",
"submitted_at": null,
"cancelled_at": null,
"cancellation_reason": "checks_failed",
"cancellation_message": null,
"blocked": true,
"status": "new"
}
],
"total_savings": null
},
"segment": {
"id": "text",
"name": "text",
"created_at": "2026-01-01T00:00:00.000Z",
"is_default": true,
"provider": "aws"
},
"flagged_actions": [
{
"id": "text",
"org_id": null,
"user_id": null,
"provider": null,
"action_type": null,
"action_description": null,
"status": "submitted",
"creation_time": "2026-01-01T00:00:00.000Z",
"execution_time": null,
"execution_info": null,
"plan_id": "text",
"plan": {
"name": "text",
"id": "123e4567-e89b-12d3-a456-426614174000",
"is_default": true,
"status": "new"
}
}
],
"created_by": {
"id": "text",
"username": "text",
"full_name": null
},
"resource_ids": [
"text"
],
"reservation_ids": [
"text"
],
"max_term": "text",
"all_terms": [
"one_year_gris"
],
"covered_ondemand_cost": 1,
"before_ondemand_cost": 1,
"before_reserved_cost": 1,
"amortized_cost": 1,
"recurring_cost": 1,
"upfront_cost": 1,
"before_cost": 1,
"after_cost": 1,
"total_cost": 1,
"savings": 1,
"fee": 1,
"commitment_coverage": 1,
"minimum_commitment_cost": 1,
"breakeven_hours": 1,
"total_savings": 1,
"monthly_savings": 1,
"monthly_amortized_cost": 1,
"monthly_fee": 1,
"monthly_before_cost": 1,
"monthly_after_cost": 1,
"total_monthly_before_cost": 1,
"aggregate_metrics": {
"potential_coverage": 1,
"current_coverage": 1,
"summaries": {
"ANY_ADDITIONAL_PROPERTY": {
"key": "text",
"name": "text",
"provider": "aws",
"service_name": "text",
"num_commitments": 1,
"min_commitment": 1,
"max_savings": 1,
"min_savings": 1,
"upfront_cost": 1,
"monthly_savings": 1,
"monthly_commitment": 1,
"potential_coverage": 1,
"current_coverage": 1,
"min_term_hours": 1,
"max_term_hours": 1,
"gri_premium": 1
}
}
},
"summaries": [
{
"key": "text",
"provider": "aws",
"num_commitments": 1,
"min_commitment": 1,
"max_savings": 1,
"min_savings": 1,
"upfront_cost": 1,
"monthly_savings": 1,
"monthly_commitment": 1,
"min_term_hours": 1,
"max_term_hours": 1,
"gri_premiums": 1,
"if_all_ondemand_cost": 1,
"before_ondemand_cost": 1,
"after_ondemand_cost": 1
}
]
}Executes purchase of a specific plan by plan ID. Creates or validates user membership and processes the plan purchase.
Email of the user executing the purchase
OK
How the plan was submitted. automation means a policy applied it rather than a person, which is what lets a client hide routine automated churn.
When the plan was submitted for purchase. Null while it is a draft. Archera executes submitted plans within 5 business days, so this is the clock a 'where is my purchase' question is measured against.
When the plan was cancelled; null while it is alive.
Why the plan was cancelled: checks_failed, customer_cancelled, duplicate_plan, no_purchasable_orders, partner_cancelled, staff_cancelled or stale_automation. Null while it is alive.
Why a cancelled plan closed, in customer terms. Null while the plan is alive. Derived from every check, including the staff-only ones, so the explanation survives without naming a check the caller cannot see.
True when the plan is alive but a customer-visible failed check stops it from purchasing until someone acts; see checks. Internal checks do not set this badge. False for cancelled and completed plans.
Cost estimate this plan was generated from (data_source = 'cost_estimate'); SET NULL survives estimate deletion.
Bad request
Unauthorized
Forbidden
Not found
Method not allowed
Conflict
Unprocessable Content
Internal server error
Default error response
POST /v2/org/{org_id}/partners/purchase-plans-v2/{plan_id}/purchase HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 26
{
"email": "name@gmail.com"
}{
"executed_via": "user",
"submitted_at": null,
"cancelled_at": null,
"cancellation_reason": "checks_failed",
"cancellation_message": null,
"blocked": true,
"start_date": null,
"end_date": null,
"id": "123e4567-e89b-12d3-a456-426614174000",
"data_source": "text",
"name": "text",
"description": null,
"segment_id": "text",
"meta_plan_id": null,
"org_id": "text",
"last_modified": null,
"plan_type": "purchase",
"coverage_id": null,
"created_at": "2026-01-01T00:00:00.000Z",
"is_calculating": true,
"is_saved": true,
"is_locked": true,
"max_upfront_cost": 1,
"minimum_upfront_interest_rate": 1,
"preferred_payment_option": "No Upfront",
"included_contract_specs": [
{
"commitment_type": "text",
"properties": {
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"term": "one_year_gris",
"payment_option": "no_upfront"
}
],
"included_contract_terms": [
"one_year_gris"
],
"recommend_within_covered_accounts": null,
"status": "new",
"is_recommended": true,
"is_default": true,
"is_renewal": true,
"is_cost_estimate_plan": true,
"source_cost_estimate_id": null,
"source_cost_estimate": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"name": "text",
"updated_at": "2026-01-01T00:00:00.000Z",
"deleted_at": null
},
"execution_policy": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"org_id": "123e4567-e89b-12d3-a456-426614174000",
"name": "text",
"description": null,
"created_at": "2026-01-01T00:00:00.000Z",
"last_modified": null,
"schedule": "quarterly",
"start_date": null,
"end_date": null,
"enabled": true,
"next_execution_date": null,
"meta_plan_id": null,
"segment_id": null,
"default_plan_name": null,
"min_savings": null,
"meta_plan": {
"id": "text",
"name": "text",
"created_at": "2026-01-01T00:00:00.000Z",
"is_default": true
},
"created_by": {
"id": "text",
"username": "text",
"full_name": null
},
"plans": [
{
"id": "text",
"name": "text",
"created_at": "2026-01-01T00:00:00.000Z",
"executed_via": "user",
"submitted_at": null,
"cancelled_at": null,
"cancellation_reason": "checks_failed",
"cancellation_message": null,
"blocked": true,
"status": "new"
}
],
"total_savings": null
},
"segment": {
"id": "text",
"name": "text",
"created_at": "2026-01-01T00:00:00.000Z",
"is_default": true,
"provider": "aws"
},
"flagged_actions": [
{
"id": "text",
"org_id": null,
"user_id": null,
"provider": null,
"action_type": null,
"action_description": null,
"status": "submitted",
"creation_time": "2026-01-01T00:00:00.000Z",
"execution_time": null,
"execution_info": null,
"plan_id": "text",
"plan": {
"name": "text",
"id": "123e4567-e89b-12d3-a456-426614174000",
"is_default": true,
"status": "new"
}
}
],
"created_by": {
"id": "text",
"username": "text",
"full_name": null
},
"resource_ids": [
"text"
],
"reservation_ids": [
"text"
]
}OK
Bad request
Unauthorized
Forbidden
Not found
Method not allowed
Conflict
Unprocessable Content
Internal server error
Default error response
PATCH /v2/org/{org_id}/partners HTTP/1.1
Content-Type: application/json
Accept: */*
Content-Length: 105
{
"aws_marketplace_offer_link": null,
"azure_marketplace_offer_link": null,
"gcp_marketplace_offer_link": null
}{
"id": "123e4567-e89b-12d3-a456-426614174000",
"name": "text",
"aws_marketplace_offer_link": null,
"azure_marketplace_offer_link": null,
"gcp_marketplace_offer_link": null
}Last updated
Was this helpful?

