# Swiftype Document Expiration API does not seem to work

**URL:** https://discuss.elastic.co/t/swiftype-document-expiration-api-does-not-seem-to-work/224322
**Category:** Elastic Search
**Tags:** elastic-site-search
**Created:** [March 19, 2020, 10:16pm UTC](https://discuss.elastic.co/t/swiftype-document-expiration-api-does-not-seem-to-work/224322 "2020-03-19T22:16:50Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![bhsiaoNFLX](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/bhsiaonflx/32/64770_2.png) [@bhsiaoNFLX](https://discuss.elastic.co/u/bhsiaoNFLX)
#### Post date: [March 19, 2020, 10:16pm UTC](https://discuss.elastic.co/t/swiftype-document-expiration-api-does-not-seem-to-work/224322/1 "2020-03-19T22:16:51Z")

</div>

I believe I may have found an issue with Swiftype's Document Expiration API: [Document Indexing | Swiftype Documentation](https://swiftype.com/documentation/site-search/indexing#expiration). I followed what the API docs said to do in regards to `expires_after` and `precise_expiration`,  
but no matter what I try I always seem to get back a record that should have already expired.

See below for a minimal bash script that reproduces the issue (API KEY omitted intentionally). It creates a dummy document MY\_DOC for MY\_ENGINE\_KEY with a randomized string and `expires_after` 60 seconds in the future, waits for 70 seconds, then runs a search query, with `precise_expiration` set, against the same randomized string. The expectation is that the record should have expired already, therefore no record should get return, however, I always seem to get 1 back.

The following test script reproduces the bug:

```auto
#! /bin/bash
export LC_CTYPE=C
export random_search_string=$(cat /dev/random | tr -dc "[:alpha:]" | head -c 32)
export ONE_MINUTE_LATER=$(date -v+1M +%s)
export MY_DOC=""
export MY_ENGINE_KEY=""
export MY_API_KEY=""

printf "Search string: $random_search_string\n"
printf "Creating '"$MY_DOC"' record with expire_after 60 seconds in the future\n"

curl -X POST 'https://api.swiftype.com/api/v1/engines/'"$MY_ENGINE_KEY"'/document_types/'"$MY_DOC"'/documents/async_bulk_create_or_update' \
  -H 'Content-Type: application/json' \
  -d '{
        "auth_token": "'"$MY_API_KEY"'",
        "documents":
[
  {
    "expires_after": '"$ONE_MINUTE_LATER"',
    "external_id": "33333",
    "fields": [
      {
        "name": "external_id",
        "value": 33333,
        "type": "string"
      },
      {
        "name": "text",
        "value": "Dummy_title",
        "type": "string"
      },
      {
        "name": "slug",
        "value": "dummy-slug",
        "type": "string"
      },
      {
        "name": "lever_id",
        "value": "dummy_lever_id",
        "type": "string"
      },
      {
        "name": "location",
        "value": "Los Gatos, California",
        "type": "string"
      },
      {
        "name": "state",
        "value": "published",
        "type": "string"
      },
      {
        "name": "url",
        "value": "https://jobs.netflix.com/jobs/33333",
        "type": "enum"
      },
      {
        "name": "created_at",
        "value": "Wed Sep 05 2018 23:43:56 GMT+0000 (Coordinated Universal Time)",
        "type": "date"
      },
      {
        "name": "description",
        "value": "dummy description",
        "type": "text"
      },
      {
        "name": "lever_team",
        "value": "dummy lever team",
        "type": "string"
      },
      {
        "name": "search_text",
        "value": "'"$random_search_string"'",
        "type": "text"
      },
      {
        "name": "subteam",
        "value": "dummy subteam",
        "type": "string"
      },
      {
        "name": "organization",
        "value": "dummy org",
        "type": "string"
      },
      {
        "name": "team",
        "value": "dummy team",
        "type": "string"
      }
    ]
  }
]

      }'

printf "\nWait 70 seconds..."
sleep 70s

printf "\nCalling search with precise_expiration flag"

# Actual record_count:1, Expected: record_count:0
curl -XGET 'https://search-api.swiftype.com/api/v1/engines/'"$MY_ENGINE_KEY"'/document_types/'"$MY_DOC"'/search.json' \
  -H 'Content-Type: application/json' \
  -d '{
        "auth_token": "'"$MY_API_KEY"'",
        "q": "'"$random_search_string"'",
        "precise_expiration": {
          "'$MY_DOC'": true
        }
      }'

```

Here's a sample output I get when I run the script on my macbook:

```
Search string: GoeUwAJkYlKATKPrrPfJntygnyKCUkoy
Creating 'postings' record with expire_after 60 seconds in the future
{"batch_link":"https://api.swiftype.com/api/v1/document_receipts.json?ids=5e753ac882ecd375041dc72f","document_receipts":[{"id":"5e753ac882ecd375041dc72f","external_id":"33333","status":"pending","errors":[],"links":{"document_receipt":"https://api.swiftype.com/api/v1/document_receipts/5e753ac882ecd375041dc72f.json","document":null}}]}
Wait 70 seconds...
Calling search with precise_expiration flag{"record_count":1,"records":{"postings":[{"text":"Dummy_title","lever_id":"dummy_lever_id","team":"dummy team","slug":"dummy-slug","external_id":"33333","description":"dummy description","url":"https://jobs.netflix.com/jobs/33333","search_text":"GoeUwAJkYlKATKPrrPfJntygnyKCUkoy","state":"published","updated_at":"2020-03-20T21:51:04+00:00","created_at":"2018-09-05T23:43:56Z","location":"Los Gatos, California","organization":"dummy org","subteam":"dummy subteam","lever_team":"dummy lever team","_index":"5e1367e6c35bc9473d5fe272","_type":"5e74278682ecd314521dab28","_score":11.990819,"_version":null,"_explanation":null,"sort":null,"id":"5e74278d28ccbc113e741f21","highlight":{}}]},"info":{"postings":{"query":"GoeUwAJkYlKATKPrrPfJntygnyKCUkoy","current_page":1,"num_pages":1,"per_page":20,"total_result_count":1,"facets":{}}},"errors":{}}

```

The important part of this output is that **record\_count** is **1** and not **0**.

---

<div class="post-metadata">

### Author: ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)
#### Post date: [May 13, 2020, 7:18am UTC](https://discuss.elastic.co/t/swiftype-document-expiration-api-does-not-seem-to-work/224322/3 "2020-05-13T07:18:21Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
