<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="apigee_v1.html">Apigee API</a> . <a href="apigee_v1.organizations.html">organizations</a> . <a href="apigee_v1.organizations.developers.html">developers</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="apigee_v1.organizations.developers.apps.html">apps()</a></code>
</p>
<p class="firstline">Returns the apps Resource.</p>

<p class="toc_element">
  <code><a href="apigee_v1.organizations.developers.attributes.html">attributes()</a></code>
</p>
<p class="firstline">Returns the attributes Resource.</p>

<p class="toc_element">
  <code><a href="apigee_v1.organizations.developers.balance.html">balance()</a></code>
</p>
<p class="firstline">Returns the balance Resource.</p>

<p class="toc_element">
  <code><a href="apigee_v1.organizations.developers.subscriptions.html">subscriptions()</a></code>
</p>
<p class="firstline">Returns the subscriptions Resource.</p>

<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a developer. Once created, the developer can register an app and obtain an API key. At creation time, a developer is set as `active`. To change the developer status, use the SetDeveloperStatus API.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a developer. All apps and API keys associated with the developer are also removed. **Warning**: This API will permanently delete the developer and related artifacts. To avoid permanently deleting developers and their artifacts, set the developer status to `inactive` using the SetDeveloperStatus API. **Note**: The delete operation is asynchronous. The developer app is deleted immediately, but its associated resources, such as apps and API keys, may take anywhere from a few seconds to a few minutes to be deleted.</p>
<p class="toc_element">
  <code><a href="#get">get(name, action=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the developer details, including the developer's name, email address, apps, and other information. **Note**: The response includes only the first 100 developer apps.</p>
<p class="toc_element">
  <code><a href="#getBalance">getBalance(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the account balance for the developer.</p>
<p class="toc_element">
  <code><a href="#getMonetizationConfig">getMonetizationConfig(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the monetization configuration for the developer.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, app=None, count=None, expand=None, ids=None, includeCompany=None, startKey=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all developers in an organization by email address. By default, the response does not include company developers. Set the `includeCompany` query parameter to `true` to include company developers. **Note**: A maximum of 1000 developers are returned in the response. You paginate the list of developers returned using the `startKey` and `count` query parameters.</p>
<p class="toc_element">
  <code><a href="#setDeveloperStatus">setDeveloperStatus(name, action=None, x__xgafv=None)</a></code></p>
<p class="firstline">Sets the status of a developer. A developer is `active` by default. If you set a developer's status to `inactive`, the API keys assigned to the developer apps are no longer valid even though the API keys are set to `approved`. Inactive developers can still sign in to the developer portal and create apps; however, any new API keys generated during app creation won't work. To set the status of a developer, set the `action` query parameter to `active` or `inactive`, and the `Content-Type` header to `application/octet-stream`. If successful, the API call returns the following HTTP status code: `204 No Content`</p>
<p class="toc_element">
  <code><a href="#update">update(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a developer. This API replaces the existing developer details with those specified in the request. Include or exclude any existing details that you want to retain or delete, respectively. The custom attribute limit is 18. **Note**: OAuth access tokens and Key Management Service (KMS) entities (apps, developers, and API products) are cached for 180 seconds (current default). Any custom attributes associated with these entities are cached for at least 180 seconds after the entity is accessed at runtime. Therefore, an `ExpiresIn` element on the OAuthV2 policy won't be able to expire an access token in less than 180 seconds.</p>
<p class="toc_element">
  <code><a href="#updateMonetizationConfig">updateMonetizationConfig(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the monetization configuration for the developer.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="create">create(parent, body=None, x__xgafv=None)</code>
  <pre>Creates a developer. Once created, the developer can register an app and obtain an API key. At creation time, a developer is set as `active`. To change the developer status, use the SetDeveloperStatus API.

Args:
  parent: string, Required. Name of the Apigee organization in which the developer is created. Use the following structure in your request: `organizations/{org}`. (required)
  body: object, The request body.
    The object takes the form of:

{
  &quot;accessType&quot;: &quot;A String&quot;, # Access type.
  &quot;appFamily&quot;: &quot;A String&quot;, # Developer app family.
  &quot;apps&quot;: [ # List of apps associated with the developer.
    &quot;A String&quot;,
  ],
  &quot;attributes&quot;: [ # Optional. Developer attributes (name/value pairs). The custom attribute limit is 18.
    { # Key-value pair to store extra metadata.
      &quot;name&quot;: &quot;A String&quot;, # API key of the attribute.
      &quot;value&quot;: &quot;A String&quot;, # Value of the attribute.
    },
  ],
  &quot;companies&quot;: [ # List of companies associated with the developer.
    &quot;A String&quot;,
  ],
  &quot;createdAt&quot;: &quot;A String&quot;, # Output only. Time at which the developer was created in milliseconds since epoch.
  &quot;developerId&quot;: &quot;A String&quot;, # ID of the developer. **Note**: IDs are generated internally by Apigee and are not guaranteed to stay the same over time.
  &quot;email&quot;: &quot;A String&quot;, # Required. Email address of the developer. This value is used to uniquely identify the developer in Apigee hybrid. Note that the email address has to be in lowercase only.
  &quot;firstName&quot;: &quot;A String&quot;, # Required. First name of the developer.
  &quot;lastModifiedAt&quot;: &quot;A String&quot;, # Output only. Time at which the developer was last modified in milliseconds since epoch.
  &quot;lastName&quot;: &quot;A String&quot;, # Required. Last name of the developer.
  &quot;organizationName&quot;: &quot;A String&quot;, # Output only. Name of the Apigee organization in which the developer resides.
  &quot;status&quot;: &quot;A String&quot;, # Output only. Status of the developer. Valid values are `active` and `inactive`.
  &quot;userName&quot;: &quot;A String&quot;, # Required. User name of the developer. Not used by Apigee hybrid.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;accessType&quot;: &quot;A String&quot;, # Access type.
  &quot;appFamily&quot;: &quot;A String&quot;, # Developer app family.
  &quot;apps&quot;: [ # List of apps associated with the developer.
    &quot;A String&quot;,
  ],
  &quot;attributes&quot;: [ # Optional. Developer attributes (name/value pairs). The custom attribute limit is 18.
    { # Key-value pair to store extra metadata.
      &quot;name&quot;: &quot;A String&quot;, # API key of the attribute.
      &quot;value&quot;: &quot;A String&quot;, # Value of the attribute.
    },
  ],
  &quot;companies&quot;: [ # List of companies associated with the developer.
    &quot;A String&quot;,
  ],
  &quot;createdAt&quot;: &quot;A String&quot;, # Output only. Time at which the developer was created in milliseconds since epoch.
  &quot;developerId&quot;: &quot;A String&quot;, # ID of the developer. **Note**: IDs are generated internally by Apigee and are not guaranteed to stay the same over time.
  &quot;email&quot;: &quot;A String&quot;, # Required. Email address of the developer. This value is used to uniquely identify the developer in Apigee hybrid. Note that the email address has to be in lowercase only.
  &quot;firstName&quot;: &quot;A String&quot;, # Required. First name of the developer.
  &quot;lastModifiedAt&quot;: &quot;A String&quot;, # Output only. Time at which the developer was last modified in milliseconds since epoch.
  &quot;lastName&quot;: &quot;A String&quot;, # Required. Last name of the developer.
  &quot;organizationName&quot;: &quot;A String&quot;, # Output only. Name of the Apigee organization in which the developer resides.
  &quot;status&quot;: &quot;A String&quot;, # Output only. Status of the developer. Valid values are `active` and `inactive`.
  &quot;userName&quot;: &quot;A String&quot;, # Required. User name of the developer. Not used by Apigee hybrid.
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes a developer. All apps and API keys associated with the developer are also removed. **Warning**: This API will permanently delete the developer and related artifacts. To avoid permanently deleting developers and their artifacts, set the developer status to `inactive` using the SetDeveloperStatus API. **Note**: The delete operation is asynchronous. The developer app is deleted immediately, but its associated resources, such as apps and API keys, may take anywhere from a few seconds to a few minutes to be deleted.

Args:
  name: string, Required. Email address of the developer. Use the following structure in your request: `organizations/{org}/developers/{developer_email}` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;accessType&quot;: &quot;A String&quot;, # Access type.
  &quot;appFamily&quot;: &quot;A String&quot;, # Developer app family.
  &quot;apps&quot;: [ # List of apps associated with the developer.
    &quot;A String&quot;,
  ],
  &quot;attributes&quot;: [ # Optional. Developer attributes (name/value pairs). The custom attribute limit is 18.
    { # Key-value pair to store extra metadata.
      &quot;name&quot;: &quot;A String&quot;, # API key of the attribute.
      &quot;value&quot;: &quot;A String&quot;, # Value of the attribute.
    },
  ],
  &quot;companies&quot;: [ # List of companies associated with the developer.
    &quot;A String&quot;,
  ],
  &quot;createdAt&quot;: &quot;A String&quot;, # Output only. Time at which the developer was created in milliseconds since epoch.
  &quot;developerId&quot;: &quot;A String&quot;, # ID of the developer. **Note**: IDs are generated internally by Apigee and are not guaranteed to stay the same over time.
  &quot;email&quot;: &quot;A String&quot;, # Required. Email address of the developer. This value is used to uniquely identify the developer in Apigee hybrid. Note that the email address has to be in lowercase only.
  &quot;firstName&quot;: &quot;A String&quot;, # Required. First name of the developer.
  &quot;lastModifiedAt&quot;: &quot;A String&quot;, # Output only. Time at which the developer was last modified in milliseconds since epoch.
  &quot;lastName&quot;: &quot;A String&quot;, # Required. Last name of the developer.
  &quot;organizationName&quot;: &quot;A String&quot;, # Output only. Name of the Apigee organization in which the developer resides.
  &quot;status&quot;: &quot;A String&quot;, # Output only. Status of the developer. Valid values are `active` and `inactive`.
  &quot;userName&quot;: &quot;A String&quot;, # Required. User name of the developer. Not used by Apigee hybrid.
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, action=None, x__xgafv=None)</code>
  <pre>Returns the developer details, including the developer&#x27;s name, email address, apps, and other information. **Note**: The response includes only the first 100 developer apps.

Args:
  name: string, Required. Email address of the developer. Use the following structure in your request: `organizations/{org}/developers/{developer_email}` (required)
  action: string, Status of the developer. Valid values are `active` or `inactive`.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;accessType&quot;: &quot;A String&quot;, # Access type.
  &quot;appFamily&quot;: &quot;A String&quot;, # Developer app family.
  &quot;apps&quot;: [ # List of apps associated with the developer.
    &quot;A String&quot;,
  ],
  &quot;attributes&quot;: [ # Optional. Developer attributes (name/value pairs). The custom attribute limit is 18.
    { # Key-value pair to store extra metadata.
      &quot;name&quot;: &quot;A String&quot;, # API key of the attribute.
      &quot;value&quot;: &quot;A String&quot;, # Value of the attribute.
    },
  ],
  &quot;companies&quot;: [ # List of companies associated with the developer.
    &quot;A String&quot;,
  ],
  &quot;createdAt&quot;: &quot;A String&quot;, # Output only. Time at which the developer was created in milliseconds since epoch.
  &quot;developerId&quot;: &quot;A String&quot;, # ID of the developer. **Note**: IDs are generated internally by Apigee and are not guaranteed to stay the same over time.
  &quot;email&quot;: &quot;A String&quot;, # Required. Email address of the developer. This value is used to uniquely identify the developer in Apigee hybrid. Note that the email address has to be in lowercase only.
  &quot;firstName&quot;: &quot;A String&quot;, # Required. First name of the developer.
  &quot;lastModifiedAt&quot;: &quot;A String&quot;, # Output only. Time at which the developer was last modified in milliseconds since epoch.
  &quot;lastName&quot;: &quot;A String&quot;, # Required. Last name of the developer.
  &quot;organizationName&quot;: &quot;A String&quot;, # Output only. Name of the Apigee organization in which the developer resides.
  &quot;status&quot;: &quot;A String&quot;, # Output only. Status of the developer. Valid values are `active` and `inactive`.
  &quot;userName&quot;: &quot;A String&quot;, # Required. User name of the developer. Not used by Apigee hybrid.
}</pre>
</div>

<div class="method">
    <code class="details" id="getBalance">getBalance(name, x__xgafv=None)</code>
  <pre>Gets the account balance for the developer.

Args:
  name: string, Required. Account balance for the developer. Use the following structure in your request: `organizations/{org}/developers/{developer}/balance` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Account balance for the developer.
  &quot;wallets&quot;: [ # Output only. List of all wallets. Each individual wallet stores the account balance for a particular currency.
    { # Wallet used to manage an account balance for a particular currency.
      &quot;balance&quot;: { # Represents an amount of money with its currency type. # Current remaining balance of the developer for a particular currency.
        &quot;currencyCode&quot;: &quot;A String&quot;, # The three-letter currency code defined in ISO 4217.
        &quot;nanos&quot;: 42, # Number of nano (10^-9) units of the amount. The value must be between -999,999,999 and +999,999,999 inclusive. If `units` is positive, `nanos` must be positive or zero. If `units` is zero, `nanos` can be positive, zero, or negative. If `units` is negative, `nanos` must be negative or zero. For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
        &quot;units&quot;: &quot;A String&quot;, # The whole units of the amount. For example if `currencyCode` is `&quot;USD&quot;`, then 1 unit is one US dollar.
      },
      &quot;lastCreditTime&quot;: &quot;A String&quot;, # Output only. Time at which the developer last added credit to the account in milliseconds since epoch.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="getMonetizationConfig">getMonetizationConfig(name, x__xgafv=None)</code>
  <pre>Gets the monetization configuration for the developer.

Args:
  name: string, Required. Monetization configuration for the developer. Use the following structure in your request: `organizations/{org}/developers/{developer}/monetizationConfig` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Monetization configuration for the developer.
  &quot;billingType&quot;: &quot;A String&quot;, # Billing type.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, app=None, count=None, expand=None, ids=None, includeCompany=None, startKey=None, x__xgafv=None)</code>
  <pre>Lists all developers in an organization by email address. By default, the response does not include company developers. Set the `includeCompany` query parameter to `true` to include company developers. **Note**: A maximum of 1000 developers are returned in the response. You paginate the list of developers returned using the `startKey` and `count` query parameters.

Args:
  parent: string, Required. Name of the Apigee organization. Use the following structure in your request: `organizations/{org}`. (required)
  app: string, Optional. List only Developers that are associated with the app. Note that start_key, count are not applicable for this filter criteria.
  count: string, Optional. Number of developers to return in the API call. Use with the `startKey` parameter to provide more targeted filtering. The limit is 1000.
  expand: boolean, Specifies whether to expand the results. Set to `true` to expand the results. This query parameter is not valid if you use the `count` or `startKey` query parameters.
  ids: string, Optional. List of IDs to include, separated by commas.
  includeCompany: boolean, Flag that specifies whether to include company details in the response.
  startKey: string, **Note**: Must be used in conjunction with the `count` parameter. Email address of the developer from which to start displaying the list of developers. For example, if the an unfiltered list returns: ``` westley@example.com fezzik@example.com buttercup@example.com ``` and your `startKey` is `fezzik@example.com`, the list returned will be ``` fezzik@example.com buttercup@example.com ```
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;developer&quot;: [ # List of developers.
    {
      &quot;accessType&quot;: &quot;A String&quot;, # Access type.
      &quot;appFamily&quot;: &quot;A String&quot;, # Developer app family.
      &quot;apps&quot;: [ # List of apps associated with the developer.
        &quot;A String&quot;,
      ],
      &quot;attributes&quot;: [ # Optional. Developer attributes (name/value pairs). The custom attribute limit is 18.
        { # Key-value pair to store extra metadata.
          &quot;name&quot;: &quot;A String&quot;, # API key of the attribute.
          &quot;value&quot;: &quot;A String&quot;, # Value of the attribute.
        },
      ],
      &quot;companies&quot;: [ # List of companies associated with the developer.
        &quot;A String&quot;,
      ],
      &quot;createdAt&quot;: &quot;A String&quot;, # Output only. Time at which the developer was created in milliseconds since epoch.
      &quot;developerId&quot;: &quot;A String&quot;, # ID of the developer. **Note**: IDs are generated internally by Apigee and are not guaranteed to stay the same over time.
      &quot;email&quot;: &quot;A String&quot;, # Required. Email address of the developer. This value is used to uniquely identify the developer in Apigee hybrid. Note that the email address has to be in lowercase only.
      &quot;firstName&quot;: &quot;A String&quot;, # Required. First name of the developer.
      &quot;lastModifiedAt&quot;: &quot;A String&quot;, # Output only. Time at which the developer was last modified in milliseconds since epoch.
      &quot;lastName&quot;: &quot;A String&quot;, # Required. Last name of the developer.
      &quot;organizationName&quot;: &quot;A String&quot;, # Output only. Name of the Apigee organization in which the developer resides.
      &quot;status&quot;: &quot;A String&quot;, # Output only. Status of the developer. Valid values are `active` and `inactive`.
      &quot;userName&quot;: &quot;A String&quot;, # Required. User name of the developer. Not used by Apigee hybrid.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="setDeveloperStatus">setDeveloperStatus(name, action=None, x__xgafv=None)</code>
  <pre>Sets the status of a developer. A developer is `active` by default. If you set a developer&#x27;s status to `inactive`, the API keys assigned to the developer apps are no longer valid even though the API keys are set to `approved`. Inactive developers can still sign in to the developer portal and create apps; however, any new API keys generated during app creation won&#x27;t work. To set the status of a developer, set the `action` query parameter to `active` or `inactive`, and the `Content-Type` header to `application/octet-stream`. If successful, the API call returns the following HTTP status code: `204 No Content`

Args:
  name: string, Required. Name of the developer. Use the following structure in your request: `organizations/{org}/developers/{developer_id}` (required)
  action: string, Status of the developer. Valid values are `active` and `inactive`.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
}</pre>
</div>

<div class="method">
    <code class="details" id="update">update(name, body=None, x__xgafv=None)</code>
  <pre>Updates a developer. This API replaces the existing developer details with those specified in the request. Include or exclude any existing details that you want to retain or delete, respectively. The custom attribute limit is 18. **Note**: OAuth access tokens and Key Management Service (KMS) entities (apps, developers, and API products) are cached for 180 seconds (current default). Any custom attributes associated with these entities are cached for at least 180 seconds after the entity is accessed at runtime. Therefore, an `ExpiresIn` element on the OAuthV2 policy won&#x27;t be able to expire an access token in less than 180 seconds.

Args:
  name: string, Required. Email address of the developer. Use the following structure in your request: `organizations/{org}/developers/{developer_email}` (required)
  body: object, The request body.
    The object takes the form of:

{
  &quot;accessType&quot;: &quot;A String&quot;, # Access type.
  &quot;appFamily&quot;: &quot;A String&quot;, # Developer app family.
  &quot;apps&quot;: [ # List of apps associated with the developer.
    &quot;A String&quot;,
  ],
  &quot;attributes&quot;: [ # Optional. Developer attributes (name/value pairs). The custom attribute limit is 18.
    { # Key-value pair to store extra metadata.
      &quot;name&quot;: &quot;A String&quot;, # API key of the attribute.
      &quot;value&quot;: &quot;A String&quot;, # Value of the attribute.
    },
  ],
  &quot;companies&quot;: [ # List of companies associated with the developer.
    &quot;A String&quot;,
  ],
  &quot;createdAt&quot;: &quot;A String&quot;, # Output only. Time at which the developer was created in milliseconds since epoch.
  &quot;developerId&quot;: &quot;A String&quot;, # ID of the developer. **Note**: IDs are generated internally by Apigee and are not guaranteed to stay the same over time.
  &quot;email&quot;: &quot;A String&quot;, # Required. Email address of the developer. This value is used to uniquely identify the developer in Apigee hybrid. Note that the email address has to be in lowercase only.
  &quot;firstName&quot;: &quot;A String&quot;, # Required. First name of the developer.
  &quot;lastModifiedAt&quot;: &quot;A String&quot;, # Output only. Time at which the developer was last modified in milliseconds since epoch.
  &quot;lastName&quot;: &quot;A String&quot;, # Required. Last name of the developer.
  &quot;organizationName&quot;: &quot;A String&quot;, # Output only. Name of the Apigee organization in which the developer resides.
  &quot;status&quot;: &quot;A String&quot;, # Output only. Status of the developer. Valid values are `active` and `inactive`.
  &quot;userName&quot;: &quot;A String&quot;, # Required. User name of the developer. Not used by Apigee hybrid.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;accessType&quot;: &quot;A String&quot;, # Access type.
  &quot;appFamily&quot;: &quot;A String&quot;, # Developer app family.
  &quot;apps&quot;: [ # List of apps associated with the developer.
    &quot;A String&quot;,
  ],
  &quot;attributes&quot;: [ # Optional. Developer attributes (name/value pairs). The custom attribute limit is 18.
    { # Key-value pair to store extra metadata.
      &quot;name&quot;: &quot;A String&quot;, # API key of the attribute.
      &quot;value&quot;: &quot;A String&quot;, # Value of the attribute.
    },
  ],
  &quot;companies&quot;: [ # List of companies associated with the developer.
    &quot;A String&quot;,
  ],
  &quot;createdAt&quot;: &quot;A String&quot;, # Output only. Time at which the developer was created in milliseconds since epoch.
  &quot;developerId&quot;: &quot;A String&quot;, # ID of the developer. **Note**: IDs are generated internally by Apigee and are not guaranteed to stay the same over time.
  &quot;email&quot;: &quot;A String&quot;, # Required. Email address of the developer. This value is used to uniquely identify the developer in Apigee hybrid. Note that the email address has to be in lowercase only.
  &quot;firstName&quot;: &quot;A String&quot;, # Required. First name of the developer.
  &quot;lastModifiedAt&quot;: &quot;A String&quot;, # Output only. Time at which the developer was last modified in milliseconds since epoch.
  &quot;lastName&quot;: &quot;A String&quot;, # Required. Last name of the developer.
  &quot;organizationName&quot;: &quot;A String&quot;, # Output only. Name of the Apigee organization in which the developer resides.
  &quot;status&quot;: &quot;A String&quot;, # Output only. Status of the developer. Valid values are `active` and `inactive`.
  &quot;userName&quot;: &quot;A String&quot;, # Required. User name of the developer. Not used by Apigee hybrid.
}</pre>
</div>

<div class="method">
    <code class="details" id="updateMonetizationConfig">updateMonetizationConfig(name, body=None, x__xgafv=None)</code>
  <pre>Updates the monetization configuration for the developer.

Args:
  name: string, Required. Monetization configuration for the developer. Use the following structure in your request: `organizations/{org}/developers/{developer}/monetizationConfig` (required)
  body: object, The request body.
    The object takes the form of:

{ # Monetization configuration for the developer.
  &quot;billingType&quot;: &quot;A String&quot;, # Billing type.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Monetization configuration for the developer.
  &quot;billingType&quot;: &quot;A String&quot;, # Billing type.
}</pre>
</div>

</body></html>