> For the complete documentation index, see [llms.txt](https://tri.gitbook.io/tri-doc/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tri.gitbook.io/tri-doc/carbon-credit/add-project.md).

# Add Project

### Carbon Credit

<mark style="color:green;">`POST`</mark> <https://sandbox.triangle.digital/api/v2/carbon\\_credit\\_form>

Creates a new Carbon Credit project and returns its identifier as `data.form_id`. The project is created in status **Submitted** — the status a project submitted from the portal gets — and a Triangle Admin reviews it from there.

**Choosing the Registry and the Methodology.** Two ways: `methodology_id`, or `methodology_registry`, `name_of_methodology` and `d_mrv_types` together — all three are required in that case. An existing methodology with that name and version is linked; otherwise it is created. `methodology_registry` alone is refused here.

`methodology_id` links an existing methodology your account may use, from D-MRV Methodologies or Get Methodologies List. `methodology_version_number` selects the version: a methodology is unique per name AND version, so two versions of one protocol are two records. Minimum 2 characters.

A registry or methodology that cannot be resolved refuses the request: the project is not stored, and the reason arrives in `data.errors.d_mrv_id`.

**Blocks of rows.** A block is one field, an array of objects. A block the request carries replaces the stored block whole; a block the request does not mention is left as it is; an empty array clears it. Contact blocks take up to 20 rows; link blocks, the Data Room rows and the allocation take up to 100. A row whose e-mail or telephone is malformed refuses the request; a telephone is digits with an optional leading `+`, without spaces or separators. Every contact block accepts `telephone` as a synonym of `phone` in its objects.

**Documents.** A row's `file` is either an uploaded file — sent as `multipart/form-data` — or the link a previous read of this project returned, which keeps that document unchanged, so a title or description can be corrected without uploading the file again; a link that does not belong to this project is refused. `data_room`, `reference_files` and `environmental_product_documents` follow the same block rule as every other block: the block replaces the stored one whole, a row left out is removed, and `data_room[]=` (one blank element, since an empty array cannot travel otherwise) clears it. Per-file limit 25 MB, 60 MB per request for the files together. Doc Types apply to `data_room` only:

<table data-full-width="true" data-search="false"><thead><tr><th>Type</th><th>Formats</th><th>Files</th></tr></thead><tbody><tr><td>Credit Rating Document</td><td><code>.pdf</code>, <code>.jpg</code>, <code>.png</code>, <code>.gif</code>, <code>.webp</code>, <code>.svg</code>, <code>.bmp</code>, <code>.tiff</code>, <code>.doc</code>, <code>.docx</code>, <code>.xls</code>, <code>.xlsx</code>, <code>.csv</code></td><td>15</td></tr><tr><td>Insurance Policy</td><td><code>.pdf</code>, <code>.jpg</code>, <code>.png</code>, <code>.gif</code>, <code>.webp</code>, <code>.svg</code>, <code>.bmp</code>, <code>.tiff</code>, <code>.doc</code>, <code>.docx</code>, <code>.xls</code>, <code>.xlsx</code>, <code>.csv</code></td><td>1</td></tr><tr><td>Methodology Document</td><td><code>.pdf</code>, <code>.jpg</code>, <code>.png</code>, <code>.gif</code>, <code>.webp</code>, <code>.svg</code>, <code>.bmp</code>, <code>.tiff</code>, <code>.doc</code>, <code>.docx</code>, <code>.xls</code>, <code>.xlsx</code>, <code>.csv</code></td><td>15</td></tr><tr><td>Other</td><td><code>.pdf</code>, <code>.jpg</code>, <code>.png</code>, <code>.gif</code>, <code>.webp</code>, <code>.svg</code>, <code>.bmp</code>, <code>.tiff</code>, <code>.doc</code>, <code>.docx</code>, <code>.xls</code>, <code>.xlsx</code>, <code>.csv</code></td><td>15</td></tr><tr><td>Picture</td><td><code>.jpg</code>, <code>.png</code>, <code>.gif</code>, <code>.webp</code>, <code>.svg</code>, <code>.bmp</code>, <code>.tiff</code></td><td>15</td></tr><tr><td>Project Design Document (PDD)</td><td><code>.pdf</code>, <code>.jpg</code>, <code>.png</code>, <code>.gif</code>, <code>.webp</code>, <code>.svg</code>, <code>.bmp</code>, <code>.tiff</code>, <code>.doc</code>, <code>.docx</code>, <code>.xls</code>, <code>.xlsx</code>, <code>.csv</code></td><td>15</td></tr><tr><td>Teaser</td><td><code>.pdf</code></td><td>1</td></tr><tr><td>Verification Report</td><td><code>.pdf</code>, <code>.jpg</code>, <code>.png</code>, <code>.gif</code>, <code>.webp</code>, <code>.svg</code>, <code>.bmp</code>, <code>.tiff</code>, <code>.doc</code>, <code>.docx</code>, <code>.xls</code>, <code>.xlsx</code>, <code>.csv</code></td><td>15</td></tr></tbody></table>

`reference_files` and `environmental_product_documents` accept the same formats as the Doc Types above (.pdf, images, .doc/.docx, .xls/.xlsx, .csv), up to 100 rows.

**Headers**

<table data-full-width="true"><thead><tr><th>Name</th><th>Value</th></tr></thead><tbody><tr><td>Content-Type</td><td><code>multipart/form-data</code> when the request carries documents, otherwise <code>application/json</code>.</td></tr></tbody></table>

**Body**

<table data-full-width="true" data-search="false"><thead><tr><th width="200">Name</th><th width="110">Type</th><th>Description</th><th width="260">Example</th></tr></thead><tbody><tr><td><code>hash</code></td><td>string</td><td><strong>Required.</strong> API key.</td><td>fk5f0iuy-rr06-j4x3-i75b-fy2s67s4ilo1</td></tr><tr><td><code>asset_name</code></td><td>string</td><td><strong>Required.</strong> Project name.</td><td>Solaris Ridge Solar Farm</td></tr><tr><td><code>project_number</code></td><td>string</td><td>Project number.</td><td>PRJ-2044</td></tr><tr><td><code>issuer_profile_logo</code></td><td>string</td><td>Logo of the issuer profile. Sent as <code>multipart/form-data</code>; a text value is refused. Formats: <code>.jpg</code>, <code>.jpeg</code>, <code>.gif</code>, <code>.png</code>, <code>.bmp</code>, <code>.webp</code>, <code>.jfif</code>, <code>.pjpeg</code>, <code>.pjp</code>, <code>.svg</code>.</td><td>logo.png</td></tr><tr><td><code>is_project_developer</code></td><td>string</td><td>Whether a separate project developer is provided. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>project_developer</code></td><td>string</td><td>Project developer name, when different from the Project Name and Project Contact.</td><td>Nexora Labs</td></tr><tr><td><code>project_developer_country</code></td><td>string</td><td>Country of the project developer.</td><td>United States</td></tr><tr><td><code>project_developer_address</code></td><td>string</td><td>Street address of the project developer.</td><td>500 Ridge Rd</td></tr><tr><td><code>project_developer_address2</code></td><td>string</td><td>Second line of the project developer's address.</td><td>Suite 200</td></tr><tr><td><code>project_developer_city</code></td><td>string</td><td>City or parish of the project developer.</td><td>New York</td></tr><tr><td><code>project_developer_state</code></td><td>string</td><td>State or region of the project developer.</td><td>NY</td></tr><tr><td><code>project_developer_zip</code></td><td>string</td><td>Zip or postal code of the project developer.</td><td>00001</td></tr><tr><td><code>project_developer_description</code></td><td>string</td><td>Profile description of the project developer.</td><td>Developer of utility-scale solar projects in the Northeast.</td></tr><tr><td><code>project_developer_logo</code></td><td>string</td><td>Logo of the project developer. Sent as <code>multipart/form-data</code>; a text value is refused. Formats: <code>.jpg</code>, <code>.jpeg</code>, <code>.gif</code>, <code>.png</code>, <code>.bmp</code>, <code>.webp</code>, <code>.jfif</code>, <code>.pjpeg</code>, <code>.pjp</code>, <code>.svg</code>.</td><td>logo.png</td></tr><tr><td><code>poc_project_developer</code></td><td>array</td><td>Contacts for the project developer, several rows at once. Objects with <code>first_name</code>, <code>last_name</code>, <code>email</code>, <code>phone</code>. Up to 20 rows.</td><td>[{ "first_name": "Ann", "last_name": "Lee", "email": "ann@dev.com", "phone": "+15550100" }]</td></tr><tr><td><code>project_different_from_asset_name</code></td><td>string</td><td>Whether the project name differs from the asset name. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>project_name</code></td><td>string</td><td>Project name, when different from the asset name.</td><td>Solaris Ridge Phase II</td></tr><tr><td><code>asset_country</code></td><td>string</td><td><strong>Required.</strong> Country where the asset is located.</td><td>United States</td></tr><tr><td><code>asset_address</code></td><td>string</td><td>Street address of the asset.</td><td>500 Ridge Rd</td></tr><tr><td><code>asset_address2</code></td><td>string</td><td>Second line of the asset's address.</td><td>Suite 200</td></tr><tr><td><code>asset_city</code></td><td>string</td><td><strong>Required.</strong> City or parish of the asset.</td><td>New York</td></tr><tr><td><code>asset_state</code></td><td>string</td><td><strong>Required.</strong> State or region of the asset.</td><td>NY</td></tr><tr><td><code>asset_zip</code></td><td>string</td><td><strong>Required.</strong> Zip or postal code of the asset.</td><td>07008</td></tr><tr><td><code>longtitude</code></td><td>string</td><td>Longitude of the asset.</td><td>-74.0133795</td></tr><tr><td><code>latitiude</code></td><td>string</td><td>Latitude of the asset.</td><td>40.7127431</td></tr><tr><td><code>time_zone_name</code></td><td>string</td><td>Time zone of the asset.</td><td>UTC</td></tr><tr><td><code>asset_category</code></td><td>string</td><td><strong>Required.</strong> Asset category.</td><td>Power generation</td></tr><tr><td><code>asset_type</code></td><td>string</td><td><strong>Required.</strong> Asset type.</td><td>Solar</td></tr><tr><td><code>asset_subtype</code></td><td>string</td><td>Asset subtype.</td><td>Gridscale solar</td></tr><tr><td><code>project_description</code></td><td>string</td><td>Description of the asset.</td><td>Utility-scale solar farm with battery storage.</td></tr><tr><td><code>instrument_category</code></td><td>string</td><td><strong>Required.</strong> Instrument category.</td><td>Carbon Credit</td></tr><tr><td><code>instrument_type</code></td><td>string</td><td>Instrument type.</td><td>Engineered</td></tr><tr><td><code>instrument_subtype</code></td><td>string</td><td>Instrument subtype.</td><td>Nature-based</td></tr><tr><td><code>is_there_serialization</code></td><td>string</td><td>Whether the project uses serialization. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>serialization_id_mask</code></td><td>string</td><td>Serialization ID Mask.</td><td>TRI-BW-0838-3545-5030</td></tr><tr><td><code>serialization_ranges</code></td><td>array</td><td>Serialization ranges of the project, several rows at once. Objects with <code>range_from</code> (<code>from</code> accepted as a synonym), <code>range_to</code> (<code>to</code>), <code>vintage</code> (<code>year</code>) — the year the credits of that range were issued for — <code>registry</code> — the name of the registry that issued them, as D-MRV Methodologies returns it — and <code>methodology</code> (<code>methodology_id</code>, <code>d_mrv_id</code> accepted as synonyms) — the identifier of the methodology the range belongs to, which must belong to that registry. Both range ends are non-negative numbers (a fractional part is allowed) and <code>range_from</code> is smaller than <code>range_to</code>. The ranges are contiguous: the <code>range_from</code> of a row is the <code>range_to</code> of the row before it plus 1. Neither end of any row can be greater than the Average QTY — the tons the project actually hands out, that is the Total Project QTY minus the Buffer and Leakage carve-out, which is minted onto its own wallets and never distributed to a company. Up to 20 rows.</td><td>[{ "range_from": "1", "range_to": "1000", "vintage": "2024", "registry": "BCarbon", "methodology": 74 }]</td></tr><tr><td><code>generate_or_create</code></td><td>string</td><td>An instruction for this request only: it is not stored with the project and is not returned by View Project. <code>Generate</code> with no <code>serialization_id_mask</code> in the request makes the platform create a mask of the form <code>TRI-AB-1234-5678-9012</code> (two random letters, three groups of four random digits) and store it as the Serialization ID Mask; when the request also sends <code>serialization_id_mask</code>, the sent mask is stored and nothing is generated. <code>Manual</code>, or leaving the field out, changes nothing. One of: <code>Generate</code>, <code>Manual</code> (case-insensitive).</td><td>Generate</td></tr><tr><td><code>asset_origin</code></td><td>string</td><td>What the asset is. One of: <code>Registry Asset</code>, <code>Registry-Aligned Methodology</code>, <code>Triangle Native</code>. If <code>source_of_asset</code> is <code>External registry</code> and the request sends no value here, it is set to <code>Registry Asset</code>.</td><td>Registry Asset</td></tr><tr><td><code>ex_ante_post</code></td><td>string</td><td><strong>Required.</strong> Whether the project is ex-ante or ex-post. This answer also states the contract type: <code>Ex-ante</code> means the credits are sold forward, <code>Ex-post</code> means they are sold as produced. One of: <code>Ex-ante</code>, <code>Ex-post</code>, <code>Both</code>.</td><td>Ex-ante</td></tr><tr><td><code>is_when_issued</code></td><td>string</td><td>Whether the asset is When-Issued. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>is_corsia</code></td><td>string</td><td>Whether the asset is CORSIA-eligible. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>is_when_verified</code></td><td>string</td><td>Whether the asset is When-Verified. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>is_icvcm_ccp_approved</code></td><td>string</td><td>Whether the asset is ICVCM - CCP Approved - the credits carry the ICVCM Core Carbon Principles label. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>carbon_credit_frequency</code></td><td>string</td><td><strong>Required.</strong> Frequency of the carbon credit issuance. One of: <code>Recurring</code>, <code>One-time</code>.</td><td>Recurring</td></tr><tr><td><code>quantity_per_year</code></td><td>array</td><td>Quantity produced per year, several rows at once. Objects with <code>year</code>, <code>qty</code>.</td><td>[{ "year": 2021, "qty": 100 }]</td></tr><tr><td><code>credits_by_years</code></td><td>string</td><td>Whether to break out the credits by year. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>crediting_period_start_year</code></td><td>string</td><td>Start date of the crediting period. <code>MM/DD/YYYY</code>.</td><td>05/12/2025</td></tr><tr><td><code>crediting_period_end_year</code></td><td>string</td><td>End date of the crediting period. <code>MM/DD/YYYY</code>.</td><td>05/13/2025</td></tr><tr><td><code>enter_number_of_years_of_forward</code></td><td>number</td><td>Number of forward years.</td><td>10</td></tr><tr><td><code>changing_price</code></td><td>string</td><td>Whether the price changes based on future years. One of: <code>Yes</code>, <code>No</code>, <code>TBD</code>.</td><td>Yes</td></tr><tr><td><code>forward_pricing_meth</code></td><td>string</td><td>Forward pricing methodology.</td><td>Fixed escalation of 2% per year.</td></tr><tr><td><code>selling_carbon_tons</code></td><td>number</td><td><strong>Required.</strong> Total tons the project creates.</td><td>100000.1245</td></tr><tr><td><code>has_unissued_qty</code></td><td>string</td><td>Whether the project has unissued QTY. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>unissued_qty</code></td><td>number</td><td>Unissued QTY, in tons. Cannot be greater than the Total Project QTY, or than the Average QTY when the project's registry holds a Buffer Pool.</td><td>1000.0</td></tr><tr><td><code>has_retired_qty</code></td><td>string</td><td>Whether the project has retired QTY. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>retired_qty</code></td><td>number</td><td>Retired QTY, in tons. Cannot be greater than the Average QTY.</td><td>1000.0</td></tr><tr><td><code>has_issued_qty</code></td><td>string</td><td>Whether the project has issued QTY. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>issued_qty</code></td><td>number</td><td>Issued QTY, in tons. Cannot be greater than the Total Project QTY, or than the Average QTY when the project's registry holds a Buffer Pool. When <code>has_issued_qty</code> is <code>Yes</code> and the project's registry holds no Buffer Pool, cannot be less than the Buffer QTY plus the Leakage QTY: those tons are issued as part of the Issued QTY.</td><td>1000.0</td></tr><tr><td><code>has_issued_qty_allocation</code></td><td>string</td><td>Whether the Issued QTY is allocated between companies. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>move_dest_companies</code></td><td>array</td><td>The allocation of the Issued QTY between companies, several rows at once. Objects with <code>company_name</code>, <code>allocation_type</code>, <code>qty</code> and <code>unallocated_qty</code> (both quantities are sent as strings). <code>allocation_type</code> says what happens to that company's share when the contract is issued: <code>digital_asset</code> transfers it to the company's external wallet, <code>registry_journal</code> records the allocation and keeps the quantity on the Average Price Wallet for a later transfer. One of: <code>digital_asset</code>, <code>registry_journal</code>; <code>digital_asset</code> when the request does not carry it. A <code>digital_asset</code> row carries its quantity in <code>qty</code>, a <code>registry_journal</code> row in <code>unallocated_qty</code>; both count as allocated. On a serialized project (<code>is_there_serialization</code> is <code>Yes</code>) a row also carries the serial range handed to that company: <code>from</code> and <code>to</code> (<code>serial_from</code>, <code>serial_to</code> accepted as synonyms), non-negative numbers (a fractional part is allowed). The quantity is then computed from the range counting both ends, as <code>to</code> minus <code>from</code> plus 1 (<code>0</code> to <code>2499</code> is <code>2500</code>, <code>0</code> to <code>0</code> is <code>1</code>), and replaces whatever the request sent in <code>qty</code> or <code>unallocated_qty</code>, so a stored quantity can never contradict its range; it lands in the cell the row's <code>allocation_type</code> uses. A row with only one end of the range keeps the quantity it was sent. The rows of a serialized project form a chain, in the order they are sent: a row's <code>to</code> is not below its <code>from</code>, and every <code>from</code> is exactly the previous row's <code>to</code> plus 1; a row with neither end is skipped. The sum of <code>qty</code> over all rows cannot exceed the Available QTY: on a serialized project the span of <code>serialization_ranges</code> (its highest <code>range_to</code> minus its lowest <code>range_from</code>), otherwise <code>issued_qty</code> minus the Buffer QTY and the Leakage QTY when the project's registry holds no Buffer Pool (those tons are part of the Issued QTY and are never distributed to a company), but never more than the Average QTY (the Total Project QTY minus the Buffer and Leakage carve-out); while that is not a positive number, no limit applies. A row with a <code>qty</code> greater than 0 must name its company. A company appears at most once per <code>allocation_type</code>: it may be listed once as <code>digital_asset</code> and once as <code>registry_journal</code>, never twice with the same type; company names are compared ignoring letter case and leading or trailing spaces. These rules apply while <code>has_issued_qty</code> and <code>has_issued_qty_allocation</code> are both <code>Yes</code> - to the block the request sends, or to the stored block when the request changes only what the Available QTY is taken from; a refused block arrives in <code>data.errors.move_dest_companies</code> and nothing is stored. Up to 100 rows.</td><td>[{ "company_name": "Nexora Labs", "allocation_type": "digital_asset", "from": "0", "to": "500" }]</td></tr><tr><td><code>is_there_buffer_qty</code></td><td>string</td><td>Whether the project has Buffer QTY. Answering <code>No</code> clears the whole Buffer group. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>buffer_qty_mint_type</code></td><td>string</td><td>Whether the Buffer QTY is included in the total tons planned for sale. One of: <code>Included</code>, <code>Additional</code>.</td><td>Included</td></tr><tr><td><code>is_buffer_supply</code></td><td>string</td><td>Whether the Buffer Supply is expressed as a percent or a QTY. One of: <code>%</code>, <code>QTY</code>.</td><td>%</td></tr><tr><td><code>buffer_supply</code></td><td>number</td><td>Buffer supply, in tons.</td><td>100.1234</td></tr><tr><td><code>buffer_supply_percent</code></td><td>integer</td><td>Buffer Supply %. In % mode the QTY is recomputed from this percent.</td><td>10</td></tr><tr><td><code>is_there_leakage_qty</code></td><td>string</td><td>Whether the project has Leakage QTY. Answering <code>No</code> clears the whole Leakage group. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>leakage_qty_mint_type</code></td><td>string</td><td>Whether the Leakage QTY is included in the total tons planned for sale. One of: <code>Included</code>, <code>Additional</code>.</td><td>Included</td></tr><tr><td><code>is_leakage_supply</code></td><td>string</td><td>Whether the Leakage Supply is expressed as a percent or a QTY. One of: <code>%</code>, <code>QTY</code>.</td><td>%</td></tr><tr><td><code>leakage_supply</code></td><td>number</td><td>Leakage supply, in tons.</td><td>100.1234</td></tr><tr><td><code>leakage_supply_percent</code></td><td>integer</td><td>Leakage Supply %. In % mode the QTY is recomputed from this percent.</td><td>10</td></tr><tr><td><code>selling_carbon_ton_price_no_commission</code></td><td>number</td><td><strong>Required.</strong> Expected price per ton for sale, before commission.</td><td>15.51</td></tr><tr><td><code>carbon_price_type</code></td><td>string</td><td>Whether the price is quoted for the seller or for the buyer. <code>Price for Seller</code> when the request does not carry it. One of: <code>Price for Seller</code>, <code>Price for Buyer</code>.</td><td>Price for Seller</td></tr><tr><td><code>price_public</code></td><td>string</td><td>Whether the price is public. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>qty_public</code></td><td>string</td><td>Whether the QTY is public. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>project_available_to_sell</code></td><td>string</td><td><strong>Required.</strong> Whether the project is available to sell. One of: <code>Yes</code>, <code>No</code>. With <code>No</code> nothing of the project is offered for sale.</td><td>Yes</td></tr><tr><td><code>available_to_sell_qty</code></td><td>number</td><td>Available to Sell QTY, in tons: the quantity of the project offered for sale. Required when <code>project_available_to_sell</code> is <code>Yes</code>. At least 1 and cannot be greater than the Average QTY.</td><td>50000.0</td></tr><tr><td><code>source_of_asset</code></td><td>string</td><td><strong>Required.</strong> Source of the asset. One of: <code>D-MRV / Methodology</code>, <code>External registry</code>.</td><td>D-MRV / Methodology</td></tr><tr><td><code>methodology_id</code></td><td>integer</td><td><strong>Required</strong> unless a new methodology is being created via <code>methodology_registry</code> + <code>name_of_methodology</code> + <code>d_mrv_types</code>. The methodology identifier is one value under three names: <code>form_id</code> in the <a href="/tri-doc/methodology-or-protocol.md">Methodology | Protocol</a> section, <code>id</code> in D-MRV Methodologies, and <code>methodology_id</code> when a project links it. Also listed by Get Methodologies List (the methodologies of your own account).</td><td>74</td></tr><tr><td><code>methodology_registry</code></td><td>string</td><td><strong>Required</strong> when a new methodology is being created (together with <code>name_of_methodology</code> and <code>d_mrv_types</code>). Registry the methodology belongs to; an existing name links that registry, a new name creates it.</td><td>BCarbon</td></tr><tr><td><code>name_of_methodology</code></td><td>string</td><td><strong>Required</strong> when a new methodology is being created (together with <code>methodology_registry</code> and <code>d_mrv_types</code>). Name of the methodology.</td><td>Blue Carbon Protocol</td></tr><tr><td><code>methodology_version_number</code></td><td>string</td><td>Version of the methodology being created. A methodology is unique per name AND version. Minimum 2 characters.</td><td>2.2</td></tr><tr><td><code>d_mrv_types</code></td><td>array</td><td><strong>Required</strong> when a new methodology is being created (together with <code>methodology_registry</code> and <code>name_of_methodology</code>). One of: <code>Carbon Credit Bermuda</code>, <code>Carbon Inset</code>, <code>Carbon Offset</code>, <code>Carbon Removal</code>, <code>Carbon Sequestration</code>, <code>Carbon Avoidance</code>, <code>Solar REC</code>, <code>Solar Carbon Credit</code>, <code>Wind REC</code>, <code>Wind Carbon Credit</code>.</td><td>["Carbon Inset","Carbon Sequestration"]</td></tr><tr><td><code>part_carbon_credit_registry_name</code></td><td>array</td><td>PoC Registry of the methodology being created, several contacts at once. Objects with <code>name</code> (<code>first_name</code> accepted as a synonym), <code>last_name</code>, <code>email</code>, <code>phone</code>. Up to 20 rows.</td><td>[{ "name": "Ann", "email": "ann@registry.com" }]</td></tr><tr><td><code>poc_dmrv</code></td><td>array</td><td>PoC D-MRV of the project, several contacts at once. Objects with <code>first_name</code>, <code>last_name</code>, <code>email</code>, <code>phone</code>. Up to 20 rows.</td><td>[{ "first_name": "Dan", "email": "dan@dmrv.com" }]</td></tr><tr><td><code>poc_ipfs</code></td><td>array</td><td>PoC IPFS of the project, several contacts at once. Objects with <code>first_name</code>, <code>last_name</code>, <code>email</code>, <code>phone</code>. Up to 20 rows.</td><td>[{ "first_name": "Iris", "email": "iris@ipfsnode.com" }]</td></tr><tr><td><code>poc_registry</code></td><td>array</td><td>Point of Contact Registry of the project — the block the form shows when the source of the asset is an external registry — several contacts at once. Objects with <code>first_name</code>, <code>last_name</code>, <code>email</code>, <code>phone</code>. Up to 20 rows.</td><td>[{ "first_name": "Rita", "email": "rita@registry.com" }]</td></tr><tr><td><code>deal_description</code></td><td>string</td><td>Deal / project description.</td><td>Voluntary carbon offset deal for a 50MW solar portfolio.</td></tr><tr><td><code>project_overview_story</code></td><td>string</td><td>Overview or story of the project.</td><td>Founded in 2019 to develop community solar in the Northeast.</td></tr><tr><td><code>cc_calculation_parameters_description</code></td><td>string</td><td>Description of the carbon credit calculation parameters.</td><td>Emission factors sourced from the regional grid mix.</td></tr><tr><td><code>cc_calculation_parameters_formula</code></td><td>string</td><td>Formula used to calculate the carbon credits.</td><td>CO2e = MWh x grid emission factor.</td></tr><tr><td><code>is_environmental_product_declaration</code></td><td>string</td><td>Whether there is an Environmental Product Declaration. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>be_measurement_cycle</code></td><td>string</td><td>Baseline emissions measurement cycle.</td><td>Annual</td></tr><tr><td><code>be_parameters_measurement_sites</code></td><td>string</td><td>Baseline emissions parameters per measurement site.</td><td>Temperature, humidity, output per inverter.</td></tr><tr><td><code>be_formula_measurement_sites</code></td><td>string</td><td>Baseline emissions formula per measurement site.</td><td>Site CO2e = output x factor.</td></tr><tr><td><code>be_number_measurement_sites</code></td><td>string</td><td>Number of measurement sites.</td><td>3</td></tr><tr><td><code>be_total_project</code></td><td>string</td><td>Total baseline emissions for the project (sum of all sites).</td><td>12500</td></tr><tr><td><code>asset_financed</code></td><td>string</td><td>Whether the asset is financed. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>financing_type</code></td><td>string</td><td>Type of financing. One of: <code>Tax Credit</code>, <code>Equity</code>, <code>Debt</code>, <code>Pre-sale</code>, <code>Grants</code>.</td><td>Debt</td></tr><tr><td><code>financing_description</code></td><td>string</td><td>Description of the financing.</td><td>Senior secured loan from a regional bank.</td></tr><tr><td><code>financing_collateral</code></td><td>string</td><td>Whether the carbon credit is part of the collateral. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>financing_counterparty</code></td><td>string</td><td>Financing counterparty.</td><td>Regional Development Bank</td></tr><tr><td><code>mediafiles_or_links</code></td><td>string</td><td>Whether asset media is provided as a file, a link, or both. One of: <code>Upload a File</code>, <code>Add a Link</code>, <code>Both</code>.</td><td>Add a Link</td></tr><tr><td><code>medialinks_for_asset</code></td><td>array</td><td>The project's tokens on an external registry, several rows at once. Objects with <code>hash</code> — the token contract address, checked against the chain: an address that is not a live token contract refuses the request — plus <code>title</code> and <code>description</code>. Up to 100 rows.</td><td>[{ "hash": "0xB1c4…", "title": "Sepolia issuance", "description": "2026 vintage" }]</td></tr><tr><td><code>data_room</code></td><td>array</td><td>Documents of the project, several rows at once. Objects with <code>type</code>, <code>title</code>, <code>description</code>, <code>file</code>. See the Doc Types table above for the accepted <code>type</code> values, formats and per-type file limits. Up to 100 rows.</td><td>[{ "type": "Project Design Document (PDD)", "title": "PDD v3", "description": "Project Design Document", "file": "https://sandbox.triangle.digital/uploads/media/file_name/1518/pdd.pdf" }]</td></tr><tr><td><code>reference_files</code></td><td>array</td><td>Reference files of the project, several rows at once. Objects with <code>title</code>, <code>description</code>, <code>file</code>. Up to 100 rows.</td><td>[{ "title": "Drone survey", "description": "Aerial survey taken 2026.", "file": "https://sandbox.triangle.digital/uploads/media/file_name/1523/survey.pdf" }]</td></tr><tr><td><code>environmental_product_documents</code></td><td>array</td><td>Environmental Product Declaration documents of the project, several rows at once. Objects with <code>title</code>, <code>description</code>, <code>file</code>. Up to 100 rows.</td><td>[{ "title": "EPD Report", "description": "Third-party verified EPD.", "file": "https://sandbox.triangle.digital/uploads/media/file_name/1524/epd.pdf" }]</td></tr><tr><td><code>hold_rights_to_cc</code></td><td>string</td><td>Whether you own or hold the rights to these carbon credits. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>who_has_rights_to_cc_company_name</code></td><td>string</td><td>Name of the rights holder.</td><td>Nexora Labs</td></tr><tr><td><code>who_has_rights_to_cc</code></td><td>array</td><td>Rights holder contacts, several rows at once. Objects with <code>company_name</code>, <code>first_name</code>, <code>last_name</code>, <code>email</code>, <code>ownership</code>. Up to 20 rows.</td><td>[{ "first_name": "Eve", "email": "eve@owner.com", "ownership": "51" }]</td></tr><tr><td><code>attest_or_sold</code></td><td>string</td><td>Whether you attest that these credits have not been issued or sold elsewhere. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>confirm_retired</code></td><td>boolean</td><td>Whether you confirm that this asset has not been retired. Accepts <code>true</code>, <code>"true"</code>, <code>"Yes"</code> and <code>1</code>.</td><td>true</td></tr><tr><td><code>verifier_or_auditor</code></td><td>string</td><td>Whether there is a verifier or auditor for this asset. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>auditor_manual_company_name</code></td><td>string</td><td>Auditor / verifier company name.</td><td>GreenCheck Verification</td></tr><tr><td><code>auditor_manual_poc</code></td><td>array</td><td>PoC Auditor/Verifier, several contacts at once. Objects with <code>first_name</code>, <code>last_name</code>, <code>email</code>, <code>phone</code>. Up to 20 rows.</td><td>[{ "first_name": "Bob", "email": "bob@audit.com" }]</td></tr><tr><td><code>is_iso_certified</code></td><td>string</td><td>Whether the verifier is ISO certified. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>iso_certified</code></td><td>array</td><td>ISO certifications held by the verifier. One of: <code>ISO 14064</code>, <code>ISO 14065</code>, <code>ISO 14066</code>, <code>ISO 14068</code>.</td><td>["ISO 14064","ISO 14065"]</td></tr><tr><td><code>auditor_attestations</code></td><td>string</td><td>Auditor / verifier attestations.</td><td>Verified against ISO 14064-2.</td></tr><tr><td><code>is_there_ratings</code></td><td>string</td><td>Whether there is a rating for this asset. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>verifier_manual_company_name</code></td><td>string</td><td>Ratings company name.</td><td>ClimateScore Ratings</td></tr><tr><td><code>verifier_manual_poc</code></td><td>array</td><td>PoC Rating, several contacts at once. Objects with <code>first_name</code>, <code>last_name</code>, <code>email</code>, <code>phone</code>. Up to 20 rows.</td><td>[{ "first_name": "Rita", "email": "rita@rating.com" }]</td></tr><tr><td><code>verifier_manual_score</code></td><td>string</td><td>Ratings score.</td><td>A+</td></tr><tr><td><code>verifier_manual_report_files_or_links</code></td><td>string</td><td>Whether the ratings report is provided as a file or a link. One of: <code>Upload a File</code>, <code>Add a Link</code>.</td><td>Add a Link</td></tr><tr><td><code>verifier_manual_report_links</code></td><td>array</td><td>Ratings report links, several rows at once. Objects with <code>link</code>. Up to 100 rows.</td><td>[{ "link": "https://ratings.example/report" }]</td></tr><tr><td><code>project_status</code></td><td>string</td><td>Status of the project. One of: <code>Completed</code>, <code>In-progress</code>, <code>Other</code>.</td><td>Completed</td></tr><tr><td><code>project_monitoring</code></td><td>string</td><td>Whether there is project monitoring for this asset. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>project_monitor_name</code></td><td>string</td><td>Project monitor name.</td><td>Meridian Monitoring Co.</td></tr><tr><td><code>poc_project_monitor</code></td><td>array</td><td>PoC Project Monitor, several contacts at once. Objects with <code>first_name</code>, <code>last_name</code>, <code>email</code>, <code>phone</code>. Up to 20 rows.</td><td>[{ "first_name": "Mia", "email": "mia@monitor.com" }]</td></tr><tr><td><code>project_methodology</code></td><td>string</td><td>Project monitoring process and methodology.</td><td>Quarterly remote sensing plus annual on-site audit.</td></tr><tr><td><code>monitoring_frequency</code></td><td>string</td><td>Monitoring frequency. One of: <code>Real-time</code>, <code>Daily</code>, <code>Monthly</code>, <code>Annual</code>, <code>Interval</code>.</td><td>Daily</td></tr><tr><td><code>process_name</code></td><td>string</td><td>Process name.</td><td>Continuous Emissions Monitoring</td></tr><tr><td><code>insurance_coverage_y_n</code></td><td>string</td><td>Whether there is insurance coverage for this asset. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>insurance_coverage_company_name</code></td><td>string</td><td>Insurance coverage company name.</td><td>Meridian Insurance Group</td></tr><tr><td><code>insurance_coverage_information</code></td><td>array</td><td>Insurance coverage contacts, several rows at once. Objects with <code>company_name</code>, <code>first_name</code>, <code>last_name</code>, <code>email</code>, <code>type</code>, <code>description</code>. Up to 20 rows.</td><td>[{ "first_name": "Cara", "email": "cara@insurer.com", "type": "All risk" }]</td></tr><tr><td><code>is_api</code></td><td>string</td><td>Whether the D-MRV provider exposes an API. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>api_poc</code></td><td>array</td><td>PoC API, several contacts at once. Objects with <code>first_name</code>, <code>last_name</code>, <code>email</code>, <code>phone</code>. Up to 20 rows.</td><td>[{ "first_name": "Ivo", "email": "ivo@api.com" }]</td></tr><tr><td><code>you_have_investors</code></td><td>string</td><td>Whether you have investors in mind to sell your supply to, subject to Triangle AML/KYC. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>you_seek_access_triangle_network</code></td><td>string</td><td>Whether you seek access to Triangle's network of brokerage partners and qualified/accredited investors. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>you_want_list_your_supply</code></td><td>string</td><td>Whether you plan to list your supply on a network of listing exchanges. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>you_identified_custody_partner_minted</code></td><td>string</td><td>Whether you have identified a custody partner for the assets once minted. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>project_beneficiary_exist</code></td><td>string</td><td>Whether there is a project beneficiary for this asset. One of: <code>Yes</code>, <code>No</code>.</td><td>Yes</td></tr><tr><td><code>project_beneficiary_quote</code></td><td>string</td><td>Quote from the project beneficiary.</td><td>This project brought clean energy jobs to our community.</td></tr><tr><td><code>project_beneficiary_company_name</code></td><td>string</td><td>Project beneficiary company name.</td><td>Lakeside Community Trust</td></tr><tr><td><code>project_beneficiary_poc</code></td><td>array</td><td>PoC Beneficiary, several contacts at once. Objects with <code>first_name</code>, <code>last_name</code>, <code>email</code>, <code>phone</code>. Up to 20 rows.</td><td>[{ "first_name": "Ben", "email": "ben@benef.com" }]</td></tr><tr><td><code>describe_goals_benefits</code></td><td>string</td><td>Description of the goals' benefits.</td><td>Reduces regional grid emissions by an estimated 5,000 tons per year.</td></tr><tr><td><code>un_dustainable_development_goals</code></td><td>array</td><td>Sustainable Development Goals (SDGs) associated with the project, several rows at once. Objects with <code>name</code>, <code>comment</code>. Up to 100 rows. One of: <code>No Poverty</code>, <code>Zero Hunger</code>, <code>Good Health and Well Being</code>, <code>Quality Education</code>, <code>Gender Equality</code>, <code>Clean Water and Sanitation</code>, <code>Affordable and Clean Energy</code>, <code>Decent Work and Economic Growth</code>, <code>Industry, Innovation and Infrastructure</code>, <code>Reduce Inequalities</code>, <code>Sustainable Cities and Communities</code>, <code>Responsible Consumption and Production</code>, <code>Climate Action</code>, <code>Life Below Water</code>, <code>Life on Land</code>, <code>Peace, Justice and Strong Institutions</code>, <code>Partnerships for the Goals</code>.</td><td>[{ "name": "Zero Hunger", "comment": "" }, { "name": "Good Health and Well Being", "comment": "" }]</td></tr><tr><td><code>un_dustainable_development_comment</code></td><td>string</td><td>Comment on the Sustainable Development Goals selected for the project.</td><td>Reduces reliance on fossil-fuel infrastructure in the region.</td></tr></tbody></table>

{% tabs %}
{% tab title="JSON" %}

```json
{
    "hash": "fk5f0iuy-rr06-j4x3-i75b-fy2s67s4ilo1",
    "asset_name": "Solaris Ridge Solar Farm",
    "asset_country": "United States",
    "asset_city": "New York",
    "asset_state": "NY",
    "asset_zip": "07008",
    "asset_category": "Power generation",
    "asset_type": "Solar",
    "instrument_category": "Carbon Credit",
    "carbon_credit_frequency": "Recurring",
    "ex_ante_post": "Ex-post",
    "selling_carbon_tons": 100000.1245,
    "selling_carbon_ton_price_no_commission": 15.51,
    "carbon_price_type": "Price for Seller",
    "project_available_to_sell": "Yes",
    "available_to_sell_qty": 50000,
    "source_of_asset": "D-MRV / Methodology",
    "methodology_id": 74,
    "poc_project_developer": [
        { "first_name": "Ann", "last_name": "Lee", "email": "ann@dev.com", "phone": "+15550100" }
    ]
}
```

{% endtab %}

{% tab title="Multipart" %}

```
Content-Type: multipart/form-data; boundary=----Boundary

------Boundary
Content-Disposition: form-data; name="hash"

fk5f0iuy-rr06-j4x3-i75b-fy2s67s4ilo1
------Boundary
Content-Disposition: form-data; name="asset_name"

Solaris Ridge Solar Farm
------Boundary
Content-Disposition: form-data; name="data_room[0][type]"

Project Design Document (PDD)
------Boundary
Content-Disposition: form-data; name="data_room[0][title]"

PDD v3
------Boundary
Content-Disposition: form-data; name="data_room[0][file]"; filename="pdd.pdf"
Content-Type: application/pdf

(binary content)
------Boundary--
```

{% endtab %}
{% endtabs %}

**Response fields**

<table data-full-width="true" data-search="false"><thead><tr><th width="300">Field</th><th width="110">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>message</code></td><td>string</td><td>Human-readable result of the call.</td></tr><tr><td><code>success</code></td><td>boolean</td><td>Whether the project was created; a refused call answers HTTP 400.</td></tr><tr><td><code>data.form_id</code></td><td>string</td><td>Identifier of the created project (its <code>asset_id</code>). Use it in the URL of View Project and Update Project.</td></tr><tr><td><code>data.errors</code></td><td>object</td><td>Present on a refusal: field name to the list of its problems. A registry or methodology that could not be resolved arrives under <code>d_mrv_id</code>.</td></tr><tr><td><code>operations_count</code></td><td>integer</td><td>Operations counted for this call in the API usage accounting.</td></tr></tbody></table>

**Response**

{% tabs %}
{% tab title="201" %}
{% code fullWidth="false" %}

```json
{
    "message": "Carbon Credit Form has been successfully created",
    "success": true,
    "data": {
        "form_id": "DE052F7DF8442D45AFB5E5543212B42A"
    },
    "operations_count": 1
}
```

{% endcode %}
{% endtab %}

{% tab title="400" %}
Sent when a required field is missing, a value fails validation, or the registry/methodology cannot be resolved; the project is not stored.

```json
{
    "message": "Carbon Credit Form has not been successfully created",
    "success": false,
    "data": {
        "errors": {
            "asset_category": [
                "can't be blank"
            ],
            "asset_name": [
                "can't be blank"
            ],
            "carbon_credit_frequency": [
                "can't be blank",
                "must be one of: \"Recurring\", \"One-time\""
            ],
            "selling_carbon_tons": [
                "can't be blank",
                "is not a number"
            ],
            "project_available_to_sell": [
                "can't be blank"
            ],
            "issued_qty": [
                "can't be greater than Average QTY (280800.0)",
                "can't be less than Buffer + Leakage QTY (15,000)"
            ],
            "d_mrv_id": [
                "Registry \"BCarbon\" cannot be created: methodology \"Blue Carbon Protocol\" is already linked to registry \"Nexora Labs\"."
            ],
            "medialinks_for_asset": [
                "item 0: Such external hash does not exist."
            ],
            "serialization_ranges": [
                "item 0: unknown key 'range' (allowed: range_from, from, range_to, to, vintage, year, registry, methodology, methodology_id, d_mrv_id)",
                "item 0: 'range_from' must be a number",
                "item 0: 'range_to' must be a number",
                "item 0: 'range_from' must be less than 'range_to'",
                "item 1: 'range_from' must continue the previous range (1001)",
                "item 0: 'vintage' must be a year between 1900 and 2026",
                "item 0: 'registry' must be a registry of D-MRV Methodologies",
                "item 0: 'methodology' must be the id of a methodology of D-MRV Methodologies",
                "item 0: 'methodology' does not belong to the registry \"BCarbon\"",
                "item 0: 'range_to' cannot be greater than the Average QTY (1000)",
                "must contain at most 20 items"
            ],
            "move_dest_companies": [
                "item 0: 'from' must be a non-negative number",
                "You cannot allocate more than the Available QTY. Allocated: 1,500 / 1,000",
                "Please specify a company name for each allocated row.",
                "Allocated Company: FROM must continue the previous range (11).",
                "Allocated Company: FROM cannot be greater than TO.",
                "Company \"Nexora Labs\" is already allocated as Digital Asset (sent to client)."
            ],
            "data_room": [
                "item 0: 'type' must be one of: \"Credit Rating Document\", \"Insurance Policy\", \"Methodology Document\", \"Other\", \"Picture\", \"Project Design Document (PDD)\", \"Teaser\", \"Verification Report\"",
                "item 1: file extension is not allowed for \"Picture\" (.jpg, .png, .gif, .webp, .svg, .bmp, .tiff)",
                "item 2: at most 1 document(s) of type \"Teaser\" are allowed",
                "item 0: file is larger than 25 MB",
                "item 1: 'file' must be an uploaded file or the link of a file already in this record",
                "item 1: 'file' does not belong to this record",
                "must contain at most 100 items"
            ]
        }
    },
    "operations_count": 1
}
```

{% endtab %}
{% endtabs %}
