> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tangoanalytics.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Project attributes outbound

# Tango Project Attributes Outbound API

> Generated from `Tango Project Attributes Outbound API Integration Design Specification V0.3.docx` in SharePoint folder `04 Projects Integrations`.
> OAS spec: [`project-attributes-outbound.yaml`](./project-attributes-outbound.yaml)

## Overview

Async **delta** REST API: client retrieves project-attribute records that were created or updated since the last successful integration run. Two-call pattern (`gu_id` ack → paginated `/v1/batch/status` GET).

**Owner:** Tango Analytics
**Spec version:** 0.3
**Status:** Draft (auto-generated from design doc — needs review). **Field-level mapping not captured in source.**

## Base URLs

| Environment | URL |
| - | - |
| Production | `https://api.tangoanalytics.com` |
| Test (SIT/UAT) | `https://testapi.tangoanalytics.com` |

## Authentication

`x-client` and `x-api-key` headers, required on every call.

## Endpoints

| Method | Path | Summary |
| - | - | - |
| GET | `/v1/projectmgmt/delta/projects` | Initiate delta export — returns `gu_id`. |
| GET | `/v1/batch/status?gu_id=...&page_no=N` | Retrieve paginated project records. |

### `GET /v1/projectmgmt/delta/projects`

**Response — 200 OK**

```json theme={null}
{
  "status": "OK/Error",
  "status_message": "",
  "gu_id": "721c54c4-c7aa-4fa1-8fdfd6-c0cee161694d"
}
```

### `GET /v1/batch/status?gu_id=...&page_no=...`

Default `page_no = 1`. Page size is 5000. Response header carries `total_records`, `total_pages`, `page_size`, `page_no`.

**Sample response**

```json theme={null}
{
  "status": "COMPLETED",
  "total_records": 40670,
  "total_pages": 9,
  "page_size": 5000,
  "page_no": 2,
  "records": [
    {
      "project_id": 75062,
      "project_name": "Phoenix Remodel Project"
    }
  ]
}
```

Null-valued fields are **omitted** from the JSON.

## Integration logic

* Delta semantics: a project is included in a run if any field other than the immutable identifiers is updated since the last run.
* Immutable identifiers (changes ignored): `project_id`, `brand_id`, `entity_id`, `template_id`, `budget_template_id`, `master_project_id`, `parent_location_id`.
* The same `gu_id` can be polled multiple times.

## Data model

⚠ **The source design doc does not include a complete field-level data-mapping table.** Only `project_id` and `project_name` appear in the sample JSON. The text section "Projects General tab / Project Attributes tab" likely had a screenshot or table that didn't extract from the .docx.

The generated YAML therefore captures only those two fields and sets `additionalProperties: true` so unknown attributes pass schema validation.

## Open Questions / Assumptions

* [ ] **Complete field list is missing** — re-source from a doc revision that includes the data-mapping table (or extract from the Tango Project entity directly).
* [ ] **Status values**: source labels the wrapper as `"status": "COMPLETED"` in the success case; whether `PROCESSING` / `ERROR` shapes mirror other integrations is assumed.
* [ ] **Page-size override**: doc shows a fixed page\_size of 5000 with no override parameter; assumed not configurable.
* [ ] **Auth/lookup defaults** are `<TBD>` in the Appendix.
* [ ] The "Tango API Architecture" section refers to a diagram (image) that didn't extract.

## Changelog

| Ver | Date | Description | Author |
| - | - | - | - |
| 0.1 | 01/16/2024 | Initial Draft | Jasmin Thasleem |
| 0.2 | 03/24/2025 | Updated Response Body and Data Mapping | Jasmin Thasleem |
| 0.3 | 04/23/2026 | Updated API Architecture | Jasmin Thasleem |
