> For the complete documentation index, see [llms.txt](https://docs.orangeprotocol.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.orangeprotocol.io/developers/get-campaign-info-using-api.md).

# Get Campaign Info using API

Orange provides open APIs implemented using the [GraphQL](https://graphql.org/) protocol to allow you to get campaign information.

{% hint style="info" %}
When sending requests, you need to include an URL, which is represented in the doc with`http://<api-endpoint>/query`. To obtain the actual URL, please contact us using [Discord](https://discord.gg/ZC7FVUDypE) or [Twitter](https://twitter.com/OrangeProtocol).
{% endhint %}

## Method List

| Method Name                                                 | Description                                             |
| ----------------------------------------------------------- | ------------------------------------------------------- |
| [getOrangeByNFTTokenID](#1-getorangebynfttokenid)           | Gets campaign details by the ID of the relevant NFT     |
| [getOrangeByCampaignID](#getorangebycampaignid)             | Gets campaign details by the campaign ID                |
| [getOrangeByCampaignHostName](#getorangebycampaignhostname) | Gets campaign details by the name of the campaign owner |

### getOrangeByNFTTokenID <a href="#id-1-getorangebynfttokenid" id="id-1-getorangebynfttokenid"></a>

Gets campaign details by the ID of the relevant NFT.

#### Parameters

<table><thead><tr><th width="198">Name</th><th width="173">Type</th><th>Description</th></tr></thead><tbody><tr><td>tokenID</td><td>Int</td><td>NFT token ID</td></tr><tr><td>chain</td><td>String</td><td>chain name (e.g. eth, polygon, bsc)</td></tr></tbody></table>

#### Returns

```
type GetOrangeByNFTTokenIDResp{
    campaignInfo:OrangeCampaignItem!
    nftInfos:NFTINfo!
    claimTime:Int!
    owner:Participant!
}
```

{% hint style="info" %}
To view the full list of variables, please refer to [Structure of Data in Returns](#structure-of-data-in-returns).
{% endhint %}

**GraphQL Schema**

```
query{
    getOrangeByNFTTokenID(tokenID:53,chain:"polygon"){
        campaignInfo{campaignID,campaignURL,campaignName,campaignHost,campaignStartTime,campaignEndTime,tasks{taskTitle,isReputationTask,reputationItem{DatasetName,
        DatasetProvider,DatasetDescription,DatasetTotalUses,DatasetCreateTime,DatasetStatus,
        Datasources,ModelName,ModelProvider,ModelDescription,ModelTotalUses,ModelCreateTime,
        ModelStatus,ModelType,ModelLowestScore,ModelHighestScore,EligibleLevelToClaim
        }}},
        nftInfos{chain,nftContractAddress},
        claimTime,
        owner{walletAddress,did}
    }
}
```

#### Examples

**Golang**

```
package main

import (
  "fmt"
  "strings"
  "net/http"
  "io/ioutil"
)

func main() {

  url := "http://<api-endpoint>/query"
  method := "POST"

  payload := strings.NewReader("{\"query\":\"query{\\n    getOrangeByNFTTokenID(tokenID:53,chain:\\\"polygon\\\"){\\n        campaignInfo{campaignID,campaignURL,campaignName,campaignHost,campaignStartTime,campaignEndTime,tasks{taskTitle,isReputationTask,reputationItem{DatasetName,\\n        DatasetProvider,DatasetDescription,DatasetTotalUses,DatasetCreateTime,DatasetStatus,\\n        Datasources,ModelName,ModelProvider,ModelDescription,ModelTotalUses,ModelCreateTime,\\n        ModelStatus,ModelType,ModelLowestScore,ModelHighestScore,EligibleLevelToClaim\\n        }}},\\n        nftInfos{chain,nftContractAddress},\\n        claimTime,\\n        owner{walletAddress,did}\\n    }\\n}\",\"variables\":{}}")

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Content-Type", "application/json")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := ioutil.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
```

**Java**

```
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"query\":\"query{\\n    getOrangeByNFTTokenID(tokenID:53,chain:\\\"polygon\\\"){\\n        campaignInfo{campaignID,campaignURL,campaignName,campaignHost,campaignStartTime,campaignEndTime,tasks{taskTitle,isReputationTask,reputationItem{DatasetName,\\n        DatasetProvider,DatasetDescription,DatasetTotalUses,DatasetCreateTime,DatasetStatus,\\n        Datasources,ModelName,ModelProvider,ModelDescription,ModelTotalUses,ModelCreateTime,\\n        ModelStatus,ModelType,ModelLowestScore,ModelHighestScore,EligibleLevelToClaim\\n        }}},\\n        nftInfos{chain,nftContractAddress},\\n        claimTime,\\n        owner{walletAddress,did}\\n    }\\n}\",\"variables\":{}}");
Request request = new Request.Builder()
  .url("http://<api-endpoint>/query")
  .method("POST", body)
  .addHeader("Content-Type", "application/json")
  .build();
Response response = client.newCall(request).execute();
```

**JavaScript**

```javascript
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");

var graphql = JSON.stringify({
  query: "query{\n    getOrangeByNFTTokenID(tokenID:53,chain:\"polygon\"){\n        campaignInfo{campaignID,campaignURL,campaignName,campaignHost,campaignStartTime,campaignEndTime,tasks{taskTitle,isReputationTask,reputationItem{DatasetName,\n        DatasetProvider,DatasetDescription,DatasetTotalUses,DatasetCreateTime,DatasetStatus,\n        Datasources,ModelName,ModelProvider,ModelDescription,ModelTotalUses,ModelCreateTime,\n        ModelStatus,ModelType,ModelLowestScore,ModelHighestScore,EligibleLevelToClaim\n        }}},\n        nftInfos{chain,nftContractAddress},\n        claimTime,\n        owner{walletAddress,did}\n    }\n}",
  variables: {}
})
var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: graphql,
  redirect: 'follow'
};

fetch("http://<api-endpoint>/query", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

### getOrangeByCampaignID

Gets campaign details by the campaign ID.

#### Parameters

| Name       | Type | Description |
| ---------- | ---- | ----------- |
| campaignID | Int  | campaign ID |

#### Returns

```
type GetOrangeByCampaignIDResp{
    campaignInfo:OrangeCampaignItem!
    participants:[Participants!]!
    nftInfos:[NFTINfo!]!
}
```

{% hint style="info" %}
To view the full list of variables, please refer to [Structure of Data in Returns](#structure-of-data-in-returns).
{% endhint %}

#### GraphQL **Schema**

```
query{
    getOrangeByCampaignID(campaignID:52){
        campaignInfo{campaignID,campaignURL,campaignName,campaignHost,campaignStartTime,campaignEndTime,tasks{taskTitle,isReputationTask,reputationItem{DatasetName,
        DatasetProvider,DatasetDescription,DatasetTotalUses,DatasetCreateTime,DatasetStatus,
        Datasources,ModelName,ModelProvider,ModelDescription,ModelTotalUses,ModelCreateTime,
        ModelStatus,ModelType,ModelLowestScore,ModelHighestScore,EligibleLevelToClaim
        }}},
        participants{chain,totalNumber,details{walletAddress,did}},
        nftInfos{chain,nftContractAddress}
    }
}
```

#### Examples

**Golong**

```go
package main

import (
  "fmt"
  "strings"
  "net/http"
  "io/ioutil"
)

func main() {

  url := "http://<api-endpoint>/query"
  method := "POST"

  payload := strings.NewReader("{\"query\":\"query{\\n    getOrangeByCampaignID(campaignID:52){\\n        campaignInfo{campaignID,campaignURL,campaignName,campaignHost,campaignStartTime,campaignEndTime,tasks{taskTitle,isReputationTask,reputationItem{DatasetName,\\n        DatasetProvider,DatasetDescription,DatasetTotalUses,DatasetCreateTime,DatasetStatus,\\n        Datasources,ModelName,ModelProvider,ModelDescription,ModelTotalUses,ModelCreateTime,\\n        ModelStatus,ModelType,ModelLowestScore,ModelHighestScore,EligibleLevelToClaim\\n        }}},\\n        participants{chain,totalNumber,details{walletAddress,did}},\\n        nftInfos{chain,nftContractAddress}\\n    }\\n}\",\"variables\":{}}")

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Content-Type", "application/json")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := ioutil.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
```

#### Java

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"query\":\"query{\\n    getOrangeByCampaignID(campaignID:52){\\n        campaignInfo{campaignID,campaignURL,campaignName,campaignHost,campaignStartTime,campaignEndTime,tasks{taskTitle,isReputationTask,reputationItem{DatasetName,\\n        DatasetProvider,DatasetDescription,DatasetTotalUses,DatasetCreateTime,DatasetStatus,\\n        Datasources,ModelName,ModelProvider,ModelDescription,ModelTotalUses,ModelCreateTime,\\n        ModelStatus,ModelType,ModelLowestScore,ModelHighestScore,EligibleLevelToClaim\\n        }}},\\n        participants{chain,totalNumber,details{walletAddress,did}},\\n        nftInfos{chain,nftContractAddress}\\n    }\\n}\",\"variables\":{}}");
Request request = new Request.Builder()
  .url("http://<api-endpoint>/query")
  .method("POST", body)
  .addHeader("Content-Type", "application/json")
  .build();
Response response = client.newCall(request).execute();
```

**JavaScript**

```javascript
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");

var graphql = JSON.stringify({
  query: "query{\n    getOrangeByCampaignID(campaignID:52){\n        campaignInfo{campaignID,campaignURL,campaignName,campaignHost,campaignStartTime,campaignEndTime,tasks{taskTitle,isReputationTask,reputationItem{DatasetName,\n        DatasetProvider,DatasetDescription,DatasetTotalUses,DatasetCreateTime,DatasetStatus,\n        Datasources,ModelName,ModelProvider,ModelDescription,ModelTotalUses,ModelCreateTime,\n        ModelStatus,ModelType,ModelLowestScore,ModelHighestScore,EligibleLevelToClaim\n        }}},\n        participants{chain,totalNumber,details{walletAddress,did}},\n        nftInfos{chain,nftContractAddress}\n    }\n}",
  variables: {}
})
var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: graphql,
  redirect: 'follow'
};

fetch("http://<api-endpoint>/query", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

### getOrangeByCampaignHostName

Gets campaign details by the name of the campaign owner.

#### Parameters

| Name | Type   | Description               |
| ---- | ------ | ------------------------- |
| name | String | name of the campaign host |

#### Returns

```
type GetOrangeByCampaignHostNameResp{
    campaignInfos:[OrangeCampaignItem!]!
}
```

{% hint style="info" %}
To view the full list of variables, please refer to [Structure of Data in Returns](#structure-of-data-in-returns).
{% endhint %}

#### GraphQL **Schema**

```
query{
    getOrangeByCampaignHostName(name:"Dework"){
        campaignInfos{campaignID,campaignURL,campaignName,campaignHost,campaignStartTime,campaignEndTime}
    }
}
```

#### Examples

**Golong**

```go
package main

import (
  "fmt"
  "strings"
  "net/http"
  "io/ioutil"
)

func main() {

  url := "http://<api-endpoint>/query"
  method := "POST"

  payload := strings.NewReader("{\"query\":\"query{\\n    getOrangeByCampaignHostName(name:\\\"Dework\\\"){\\n        campaignInfos{campaignID,campaignURL,campaignName,campaignHost,campaignStartTime,campaignEndTime}\\n    }\\n}\",\"variables\":{}}")

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Content-Type", "application/json")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := ioutil.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
```

**Java**

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"query\":\"query{\\n    getOrangeByCampaignHostName(name:\\\"Dework\\\"){\\n        campaignInfos{campaignID,campaignURL,campaignName,campaignHost,campaignStartTime,campaignEndTime}\\n    }\\n}\",\"variables\":{}}");
Request request = new Request.Builder()
  .url("http://<api-endpoint>/query")
  .method("POST", body)
  .addHeader("Content-Type", "application/json")
  .build();
Response response = client.newCall(request).execute();
```

**JavaScript**

```javascript
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");

var graphql = JSON.stringify({
  query: "query{\n    getOrangeByCampaignHostName(name:\"Dework\"){\n        campaignInfos{campaignID,campaignURL,campaignName,campaignHost,campaignStartTime,campaignEndTime}\n    }\n}",
  variables: {}
})
var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: graphql,
  redirect: 'follow'
};

fetch("http://<api-endpoint>/query", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

## Structure of Data in Returns&#x20;

### CampaignItem

```
type OrangeCampaignItem{
    campaignID:Int!                // unique campaign ID
    campaignURL:String!            // URL of the campaign
    campaignName:String!           
    campaignHost:String!           // Owner of the campaign
    campaignStartTime:Int!         // Unix timestamp
    campaignEndTime:Int!           // Unix timestamp
    tasks:[OrangeTaskItem!]!       // campaign tasks 
}
```

### TaskItem

```
type OrangeTaskItem{
    taskTitle:String!                     // task title
    isReputationTask:Boolean!             // if the task requires to invoke a reputation model
    reputationItem:OrangeReputation       // if yes, returns task details as listed below
}
```

```
type OrangeReputation{
    DatasetName:String!
    DatasetProvider:String!
    DatasetDescription:String!
    DatasetTotalUses:Int!
    DatasetCreateTime:Int!
    DatasetStatus:String!
    Datasources:String!
    ModelName:String!
    ModelProvider:String!
    ModelDescription:String!
    ModelTotalUses:Int!
    ModelCreateTime:Int!
    ModelStatus:String!
    ModelType:String!
    ModelLowestScore:Int!
    ModelHighestScore:Int!
    EligibleLevelToClaim:Int!
}
```

### Participant

```
type Participants{
    chain:String!
    totalNumber:Int!
    details:[Participant!]!
}
```

```
type Participant{
    walletAddress:String!    // participant's wallet address
    did:String!              // participant's DID
}
```

### NFTINfo

```
type NFTINfo{
    chain:String!
    nftContractAddress:String!
}
```
