# API 인증

> 탭조이 오퍼월 API를 사용하여 API 요청을 인증해 사용자 참여와 수익화 데이터를 관리할 수 있는 인증된 액세스를 확보합니다.

## 액세스 요청##requesting-access

요청은 표준 2단계의 OAuth2 플로를 사용하여 인증됩니다. 인코딩된 API 키를 사용하여 `access_token`을 요청하고 그에 따른 `access_token`을 사용하여 향후 요청을 인증합니다.

App > Settings > App Settings를 선택하고 화면을 스크롤한 후 API Keys를 선택하여 [LTV 대시보드](https://ltv.tapjoy.com/)에서 API 키를 확인할 수 있습니다.

![Offerwall 대시보드에 표시되는 마케팅 API 키입니다.](/api/media?file=/grow/media/images/api_key.png)

액세스 토큰의 수명은 1시간이며 새로 고침할 수 없습니다. 토큰이 만료되면 리포트 API 키나 마케팅 API 키를 사용하여 새 토큰을 요청해야 합니다.

액세스 토큰을 요청하려면 API 키를 사용하여 인증 헤더가 있는 POST 요청을 보내야 합니다. 자격 증명이 유효하면 응답에 액세스 토큰과 토큰 만료까지 남은 시간(초 단위)이 포함됩니다.

### 요청 예시##example-request

다음 예시는 원시 HTTP, curl, Ruby를 사용하여 액세스, 접근 토큰 요청하는 방법을 보여 줍니다.

1. **Raw**

   ```graphql
   POST /v1/oauth2/token 
   Host: api.tapjoy.com 
   Authorization: Basic <API Key> 
   Accept: application/json
   ```

2. **Curl**

   ```curl
   curl -H "Authorization: Basic <API Key>" -X POST https://api.tapjoy.com/v1/oauth2/token
   ```

3. **Ruby**

   ```ruby
   require 'json'
   require 'net/https'

   access_token = "<OAuth Token>"

   query = <<~END
   query {
     user {
       firstName
     }
   }
   END
   json = JSON.dump({query: query})

   http = Net::HTTP.new('api.tapjoy.com', 443)
   http.use_ssl = true

   request = Net::HTTP::Post.new('/graphql')
   request['Authorization'] = "Bearer #{access_token}"
   request.body = json
   response = http.request(request)

   result = JSON.parse(response.body)
   data = result['data']
   errors = result['errors']
   ```

### 성공적인 대응##successful-response

성공적으로 요청하면 액세스, 접근 토큰 포함된 200 상태와 만료 기간 초 단위로 반환됩니다.

```graphql
status 200 
{ 
"access_token": "token_string", 
"token_type": "bearer", 
"expires_in": 3600, 
"refresh_token": null 
} 
```

### 응답 실패##unsuccessful-response

API 키가 유효하지 않거나 누락되면 요청에 401 상태가 반환됩니다.

```graphql
status 401
{ 
"error": "유효하지 않음" 
} 
```

## 액세스 토큰 사용##using-the-access-token

`access_token`이 있으면 API에 요청을 생성할 수 있습니다. `access_token`는 인증 헤더의 모든 요청과 함께 ‘Bearer’ 유형으로 전송되어야 합니다. `access_token`이 만료되었거나 존재하지 않으면 응답은 401 Unauthorized 상태가 됩니다.

### 요청 예시##example-request

다음 예제는 인증된 API 요청에 필요한 헤더를 보여줍니다.

```curlrc
POST /v4/audiences 
Host: api.tapjoy.com 
Authorization: Bearer <token_string> 
Accept: application/json
```

### 누락/유효하지 않은 토큰 응답##missing-or-invalid-token-response

액세스, 접근 토큰 누락되었거나 만료되면 요청에 401 상태가 반환됩니다.

```curlrc
status 401 
{ 
"error": "유효하지 않음" 
} 
```
